IM流程

大体流程先记录下,后面慢慢完善

登录流程

  1. http 登录 -> 返回 token,服务器时间 (并根据本地时间计算与服务器时间差量 D)
  2. 建立tcp长连接,发送握手包
  3. http 拉取好友id列表
  4. http 拉取群聊id列表

D = 服务器时间 - 本地时间
以上过程完成后,进入消息列表界面

拉取消息流程

  1. 获取上次拉取消息的时间 T(本地时间+与服务器时间的差量),若没有则默认为当前时间减去一天的时间
  2. http 携带 T 拉取离线消息,并将 T 更新为本次拉取消息的时间
  3. 根据返回结果的时间戳对消息列表进行倒排序(即将最新消息的item放到第一个)

进入好友列表界面

  1. 展开组,判断此组内的好友最后拉取时间是否是在登录时间之前
  2. http 若在此次登录时间之前,则拉取当前组好友的头像、签名、昵称、状态等,并更新此次拉取时间;若在此次登录之后,则不拉取
  3. 此后好友状态变化可通过推送获取

进入聊天界面

  1. http 用户在此界面下拉,首先展示客户端本地存储的历史消息,当本地历史消息读取完了,则从服务器拉取最长不超过一个月的消息记录
  2. 若进入的聊天界面是群聊,则需要轮询拉取此群聊界面的好友状态,直至用户关闭或者返回该聊天界面

发送聊天消息

  1. 用户首先输入消息,客户端根据消息内容组成相应的包
  2. http 客户端向服务端获取一个消息id
  3. tcp 客户端将新获取到的消息id设置成该消息包的id,发送到服务端,并响应服务端的返回结果
  4. 消息包组装分类
  • 文本消息,直接组包发送
  • 语言消息,需要先将语言文件上传到oss,然后将oss返回的结果,组装成消息包发送
  • 图片消息,与语音消息处理过程大体相同
  • 视频、短视频消息,与语音消息不同的是,还需要上传视频的缩略图,即上传两个资源
  • 链接消息,目前直接当文本消息处理

发送消息撤销指令

  1. 客户端判断该消息发送是否已超过2分钟,若超过2分钟,不允许撤回

消息指令响应

  1. 聊天响应消息指令,若返回失败,客户端需要表现出来
  2. 聊天消息推送指令,客户需要将该消息展示到对应的聊天界面,并且做好本地存储,同时还要回复服务器一条已收到消息的指令
  3. 撤销消息指令,客户端根据消息id,从聊天界面移除,并且展示撤销痕迹,同时从本地数据库中删除该消息
  4. 加入群聊响应指令,将结果展示给用户,并处理一些其它逻辑
  5. 加入群聊通知指令,在群聊界面展示
  6. 退出群聊响应指令,退出成功不做处理,退出失败将原因展示给用户
  7. 退出群聊通知指令,在群聊界面展示
  8. 其他更多指令开发中继续扩展。。。

你可能感兴趣的:(IM流程)