|
很好的思路,但是有个问题,【群消息优化3:离线消息表】中把离线消息表去掉了,那不就从原来的写扩散变成读扩散了吗。同步的时候需要先从t_group_users表找出所有群的last_msg_id,然后每个群根据last_msg_id从t_group_msgs获取消息吗? 离线消息表主要的作用是写扩散吧。 |
| 虽然一开始就想到了最后的步骤,不过一步一步跟着思路走还是能弥补自己的思维局限 |
| 请问怎么计算未读数呢? |
引用:某非著名程序 发表于 2021-03-14 19:10 服务端存的话,要是你客户端卸载过,再次安装时就能精确加载增量的离线消息,否则就麻烦了 |
|
看了好几遍,我是客户端开发者。有一个疑问 群消息存储一个列表,那个客户端拉取到了那条消息,客户端本身是知道的。服务端是不是就不需要存储time(或者msg_id)? |
| 群聊缓存消息,怎么触发去删除呢? |
引用:JackJiang 发表于 2019-09-23 20:19 @JackJiang 容错的逻辑能给个具体的思路吗? 另外,这个容错的机制是不是放在客户端判断比较好? |
引用:eng 发表于 2019-09-23 16:52 对于服务端来说,这种异常的ACK,应该有个容错的逻辑 |
引用:JackJiang 发表于 2019-09-23 14:51 @JackJiang 不是,我不担心4和6拉取重复; 我担心按msg_id > 5 拉取群离线消息,没有拉取到msg_id=4的这条消息 |
引用:eng 发表于 2019-09-23 13:33 你是在担心:实际上4、6已被收到的情况下,如果服务端再存4、6离线的话,下次拉取就会存在4、6在接收者那边重复的情况吗? |
引用:JackJiang 发表于 2019-09-23 13:08 @JackJiang 接收者在线收到了msg_id=4,5,6的这三条, 但msg_id=4和msg_id=6的ACK没有成功, 那msg_id=4的这条怎么离线拉取出来? |
引用:eng 发表于 2019-09-23 12:53 你这说的好乱,你直接说,接收者已经在线收到了哪几条,离线了哪几条 |
|
@JackJiang 如果按msg_id或者时间戳拉取群聊离线消息,遇到以下这种情况怎么处理,求指导. 客户端在线分别收到msg_id为4,5,6的三条在线推送消息,客户端ACK时,msg_id为4和6的消息,ACK未被服务端收到; 客户端再次登录后,按msg_id拉取离线消息,只能拉取5和6,4必然丢失; 按时间戳也存在类似的问题,怎么办呢? |
引用:jituijiaqiezi 发表于 2019-06-18 16:02 qq的设计原则是万有一失,方案没有完美的,能把异常控制在可接受范围内,也算是一种折中啦 |
| 如果只有last_ack_msg_id,如果用户登录了去拉取数据,客户端还没返回拉取的ack,聊天通道就新发送了消息,服务端收到在线的ack,那么这时候如果更新last_ack_msg_id,就可能出错了,这个问题怎么解决呢 |
引用:郑柳青 发表于 2019-04-19 12:15 ![]() |
| 其实不太想写评论,因为还没消化后提出好问题或者更好的解决方案。想把好位置给有价值的信息。 不过想想积极的评论也是对作者和传播者更大的鼓励。 喜欢阅读这种渐进式文章。 一步一步优化推进,已不是个人纪要,完全是教科书。赞👍 |
| 学习了,正在做相关工作。 |
引用:JackJiang 发表于 2019-01-02 18:23 是的,说的有道理,在离线情况下我这种体验确实不太好,可能用户点进去聊天界面后都是一片空白。 在网络时断时续的情况下,我倒觉得没有太大问题,因为这时就算是在线消息,也可能出现频繁发送、接收不到的坏体验,更何况离线消息了。 |