IM消息同步方案
2023-11-17 18:35:31 0 举报
IM离线消息同步方案
作者其他创作
大纲/内容
场景:打开单聊会话
会话列表数据
查询会话离线包同步记录表
从集合中删除当前会话
结束
群聊
存储消息
最近离线消息是否同步完成
更新会话表标记该会话已完成最近离线消息同步
N
异步执行
Y
与单聊逻辑一致
发起单聊
详见流程2
判断条件:
取单个离线包
详见流程1
会话列表
是否是近2天的消息
会话最近离线消息同步
展示消息
网络或本地
1.从本地加载2.查询是否有未读@消息
y
启动app
1.从本地搜索2.调用接口
发起群聊
最近离线消息是否同步完
是否继续同步说明:
调用接口查询指定日期离线包
从集合删除该条数据
APP启动IM初始化流程
本地
集合中是否还有数据
不可执行下拉操作
从指定消息开始加载50条
包是否已完成下载入库
搜索页
加载缓存数据到列表
数据库
下拉操作,查看历史消息
场景:打开群聊会话
发起查询
是否需要同步最近离线消息
该数据取自增量会话接口调用之后,长链接建立之前,从会话表条件查询未完成同步检查的会话
流程2:单个会话离线消息同步逻辑(仅同步近2天)
获取会话列表数据
场景:通过搜索指定消息,进入聊天页
更新离线包同步表标识该日期已完成同步
是否完成同步
点击结果
执行下拉查询历史消息
1.更新会话表2.更新会话最近离线消息同步标记表
1.取本次网络拉取的数据最小值2.判断createTime是否小于昨天零点 y:小于说明是前天的消息,不再同步 n:大于则继续发起请求这里之所以考虑仅同步近2天的离线数据,是新方案下,离线包是每天按会话去生成。当在凌晨打开应用时,可能昨天的离线包还未生成
从本地加载
请求接口加载数据
跳转聊天页
1.从“会话最近离线消息同步标记表” 取出该会话2.判断updateTime是否小于会话表updateTime,小于则说明该会话有增量消息,需要同步
判定条件:查询离线包同步表,若查询到此包记录则不执行下载
取createTime最大值做请求入参
本次返回消息量是否大于500条
取聊天页列表第一条数据与查询结果最后一条消息对比,当序号id不连续则认为中间有丢失的消息
是否还有未同步的会话
单聊
取会话
会话列表最近离线消息同步
未完成同步,可能是用户关闭页面
流程3:离线包下载逻辑
流程1:会话离线消息同步判定逻辑
网络
是否有需要同步的会话
进入会话同步流程
将该会话从流程1异步任务中移除,并标记同步完成
对应日期离线包集合
建立长链接
流程3
判断消息是否中断
刷新列表 加载最新数据
1.请求增量会话数据2.请求未读@消息(他人@我)3.更新会话表及未读@消息表
是否继续同步
场景:聊天页分页加载逻辑(下拉操作,查看历史消息)
1.下载离线包并存储消息2.离线包同步表插入该包信息
请求网络获取离线消息
查询最新消息取createTime字段
是否还有未同步会话判断:
是否还有需要同步的会话
是否下载过该日期离线包
从会话表查询
单个会话离线消息同步流程
聊天页
0 条评论
下一页