核心功能与通信方式设计
(一)两大核心功能
- 作为入口服务器接收客户端所有请求,完成子服务分发并将处理后的响应反馈给客户端。
- 向客户端推送各类事件通知,包括好友申请 / 处理 / 删除、单聊 / 群聊会话创建、新消息提醒等。
(二)两种通信方式
网关服务器基于核心功能设计了两类通信,各司其职:
- HTTP 通信:负责各类业务处理相关的请求与响应。
- WEBSOCKET 通信:专门用于向客户端进行各类事件通知。
模块功能示意图
接口实现流程
所有接口的实现均基于 HTTP 请求处理,核心流程围绕ProtoBuf 反序列化、鉴权(部分接口)、子服务查找与调用、结果响应展开,部分接口包含事件通知的额外步骤。按功能可将接口分为用户基础操作、好友相关操作、聊天会话与消息操作、文件与语音操作四大类,各类接口的实现步骤如下:
(一)用户基础操作接口
包含用户名 / 手机号码注册、用户名 / 手机号码登录、短信验证码获取、用户信息获取、用户头像 / 签名 / 昵称 / 绑定手机号修改,注册 / 登录 / 验证码获取为基础步骤,信息查询与修改需增加鉴权步骤:
- 基础步骤(注册 / 登录 / 验证码获取)① 取出 HTTP 请求正文,进行 ProtoBuf 反序列化;② 查找用户子服务;③ 调用用户子服务对应接口处理业务;④ 将处理结果响应给客户端。
- 鉴权步骤(信息查询 / 修改)在基础步骤②前增加:根据请求中的会话 ID 鉴权,获取用户 ID 并写入请求中,后续步骤一致。
(二)好友相关操作接口
此类接口均需先完成鉴权,部分接口需调用多个子服务并触发事件通知,是流程较复杂的一类接口,包含获取好友列表、发送好友申请、获取待处理好友申请、好友申请处理、删除好友、搜索用户:
- 基础好友操作(获取好友列表 / 待处理申请 / 搜索用户)① ProtoBuf 反序列化;② 会话 ID 鉴权并设置用户 ID;③ 查找好友子服务;④ 调用接口处理业务;⑤ 响应客户端。
- 发送好友申请① ProtoBuf 反序列化;② 鉴权并设置用户 ID;③ 查找用户子服务并调用,获取用户详细信息;④ 查找好友子服务并调用对应接口;⑤ 处理成功则根据被申请人 ID 查找其长连接,在线则推送好友申请通知;⑥ 响应客户端。
- 好友申请处理① ProtoBuf 反序列化;② 鉴权并设置用户 ID;③ 查找用户子服务并调用,获取申请人与被申请人详细信息;④ 查找好友子服务并调用对应接口;⑤ 处理成功则向申请人推送申请处理结果通知;⑥ 若处理结果为同意,则为申请人和处理者分别推送聊天会话创建通知(基于会话 ID、对方昵称 / 头像组织会话信息);⑦ 清理响应中的会话 ID 信息;⑧ 响应客户端。
- 删除好友① ProtoBuf 反序列化;② 鉴权并设置用户 ID;③ 查找好友子服务并调用接口;④ 处理成功则根据被删除者 ID 查找其长连接,在线则推送好友删除通知;⑤ 响应客户端。
(三)聊天会话与消息操作接口
包含获取用户聊天会话列表、创建多人聊天会话、获取消息会话成员列表、发送新消息、获取指定时间段消息列表、获取最近 N 条消息列表、搜索关键字历史消息,消息查询类仅需基础鉴权与子服务调用,会话创建 / 发消息包含事件通知:
- 消息查询类(多时段消息 / 最近 N 条 / 关键字搜索)① ProtoBuf 反序列化;② 鉴权并设置用户 ID;③ 查找消息存储子服务;④ 调用接口处理业务;⑤ 响应客户端。
- 会话基础操作(会话列表 / 成员列表)① ProtoBuf 反序列化;② 鉴权并设置用户 ID;③ 查找好友子服务;④ 调用接口处理业务;⑤ 响应客户端。
- 创建多人聊天会话① ProtoBuf 反序列化;② 鉴权并设置用户 ID;③ 查找好友子服务并调用接口;④ 处理成功则循环查找所有会话成员长连接,逐个推送会话创建通知;⑤ 清理响应中的会话信息;⑥ 响应客户端。
- 发送新消息① ProtoBuf 反序列化;② 鉴权并设置用户 ID;③ 查找消息转发子服务并调用接口;④ 处理成功则根据结果中的用户 ID 列表,循环查找目标长连接并推送新消息通知;⑤ 处理失败则根据错误信息设置响应内容;⑥ 响应客户端。
(四)文件与语音操作接口
此类接口均需完成鉴权,按功能分为文件操作(单个 / 多个文件上传、单个 / 多个文件获取)和语音操作(语音转文字),所有接口流程统一,仅查找的子服务不同:
- 通用步骤① 取出 HTTP 请求正文,进行 ProtoBuf 反序列化;② 根据会话 ID 鉴权,获取并设置用户 ID;③ 查找对应子服务(文件操作找文件子服务,语音操作找语音子服务);④ 调用子服务对应接口处理业务;⑤ 将处理结果响应给客户端。