IM项目:进阶版即时通讯项目---好友管理和网关服务

本篇主要是对于IM项目中的好友管理和网关服务进行一个描述,由于代码逻辑还是有点复杂的,所以这里只是列一个大纲,具体的内容去看仓库中的代码

好友管理服务

功能设计

对于好友管理服务来说,要实现以下的内容:

  1. 好友列表的获取:用户登录成功后,获取自己的好友列表
  2. 申请好友:向某个指定用户发送一个好友申请
  3. 待处理申请:在用户登录后,会获取到需要进行处理的好友的请求
  4. 好友申请的处理:同意或者拒绝
  5. 删除好友:对于指定好友关系进行删除
  6. 用户搜索:搜索指定的用户,获取相关的信息
  7. 聊天会话列表获取:登录成功后获取到当前你所处于的单聊或者群聊的聊天
  8. 群聊的创建:根据选择的用户ID信息,创建出会话的群聊功能
  9. 聊天成员的获取:在群聊中获取成员列表

模块划分

  1. 参数解析模块
  2. 日志模块
  3. 服务注册模块
  4. 数据库数据成员操作模块
  5. 同意好友申请,插入一个单聊会话到数据库中
  6. 从数据库根据指定用户ID获取好友ID
  7. 创建群聊的时候要向数据库中插入群聊的信息
  8. 根据用户ID获取会话的信息
  9. 删除好友的时候要删除的是两人的好友关系,单聊会话以及会话成员的信息
  10. RPC调用
  11. ElasticSearch搜索

网关服务

网关服务其实没什么好说的,主要就是把前面的功能都缝合在了一起,不过值得注意的是WebSocket的用法,具体看代码吧

功能设计

网关服务器在设计中,最重要的两个功能:

  • 作为入口服务器接收客户端的所有请求,进行请求的子服务分发,得到响应后进行响应
  • 对客户端进行事件通知(好友申请和处理及删除,单聊/群聊会话创建,新消息)

基于以上的两个功能,因此网关服务器包含两项通信:

  • HTTP 通信:进行业务处理
  • WEBSOCKET 通信:进行事件通知

模块划分

  1. 参数/配置文件解析模块:基于 gflags 框架直接使用进行参数/配置文件解析。
  2. 日志模块:基于 spdlog 框架封装的模块直接使用进行日志输出。
  3. rpc 服务发现与调用模块:基于 etcd 框架与 brpc 框架封装的服务发现与调用模块
    • 因为要分发处理所有请求,因此所有的子服务都需要进行服务发现。
  4. redis 客户端模块:基于 redis++封装的客户端进行内存数据库数据操作
    • 根据用户子服务添加的会话信息进行用户连接身份识别与鉴权
  5. HTTP 通信服务器模块:基于 cpp-httplib 库搭建 HTTP 服务器,接收 HTTP 请求进行业务处理。
  6. WEBSOCKET 服务器模块:基于 Websocketpp 库,搭建 websocket 服务器,进行事件通知。
  7. 客户端长连接管理模块:建议用户 ID 与长连接句柄映射关系,便于后续根据用户 ID 找到连接进行事件通知

接口实现流程

  • 用户名注册
  • 用户名登录
  • 短信验证码获取
  • 手机号码注册
  • 手机号码登录
  • 用户信息获取
  • 修改用户头像
  • 修改用户签名
  • 修改用户昵称
  • 修改用户绑定手机号
  • 获取好友列表
  • 发送好友申请
  • 获取待处理好友申请
  • 好友申请处理
  • 删除好友
  • 搜索用户
  • 获取用户聊天会话列表
  • 创建多人聊天会话
  • 获取消息会话成员列表
  • 发送新消息
  • 获取指定时间段消息列表
  • 获取最近 N 条消息列表
  • 搜索关键字历史消息
  • 单个文件数据获取
  • 多个文件数据获取
  • 单个文件数据上传
  • 多个文件数据上传
  • 语音转文字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海绵宝宝de派小星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值