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. 其他更多指令开发中继续扩展。。。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,754评论 0 15
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,054评论 3 119
  • 第八回 初战Him:惨败&分散 任启雷钰刚说完,只见Him 出现在我们的面前,说:“想杀了我,还早着呢!!!...
    血雨昕风阅读 2,435评论 1 4
  • 今日体验,服务客户的本质是,客户满意度,只有管控好客户满意度,企业才会持续发展。 找核心,怎么让客户满意就怎么...
    王海博阅读 1,049评论 0 0

友情链接更多精彩内容