有一个痛点,因为所有消息都储存在本地,导致无法接收离线消息,例如:
现在有 UserA 、UserB 、UserC 、UserD 4 个用户,A 、B 、C 在线,D 离线
时间点 1:UserA 、UserB 、UserC 三个用户聊天,产生 3 条信息 “message-1-A, message-1-B, message-1-C”
时间点 2:UserC 离线退出聊天,UserA 与 UserB 继续聊天,产生 2 条信息:“message-2-A, message-2-B”
时间点 3:UserC 、UserD 上线加入聊天,那么此时,时间点 1 和时间点 2 的聊天信息需要同步给 UserC 和 User D
UserA 、UserB 拥有所有信息记录 5 条, 无需同步
UserC 本地记录 3 条,需要同步时间点 2 ,同步 2 条
UserD 本地无记录,需要同步时间点 1+2 同步 5 条
如上,我了解一些分布式同步的解决方案,etcd 、raft 等,奈何太菜看得一脸懵逼,上手太复杂
目前想到的解决方案就是,A 、B 、C 、D 广播自己所有的消息记录,然后各自接收,通过消息的时间戳 Diff, 然后同步时根据 Diff 出的差值,追加或插入。
[ol]
[/ol]