默认
发表评论 9
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求解IM群聊中消息排序的问题,到底按什么排序合适
阅读(20262) | 评论(9 收藏 淘帖
看了几个帖子,提到对群聊消息可以采用按服务端时间排序的方法。假设群 group中,有A、B、C三个人同时发消息,那么对接收人而言,由于不同客户端本地时间不一致,这3个消息按服务端时间排序是没问题的。
但是假设A一下子发了 a, b两条消息,如果这两条到达服务端顺序不一样,那么对于接受者而言,不是就收到 b, a了么?如果 a,b两条消息是有逻辑关系的,这个对接受者而言是不是有问题?



引用:“群聊消息以服务器收到发送消息的顺序为准,服务器为每条消息生成时间有序的msgid,客户端以msgid大小顺序来排序即可。”

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:求教关于IM用户信息和群聊信息缓存的差异更新和拉取问题下一篇:小白求教如何实现硬件设备上存储和回放RTSP流
推荐方案
评论 9
引用:营业中 发表于 2022-10-31 10:48
首先对于发送a b消息,一般不会等a应答之后才发b。这样效率太低了。
即使我们真的等a返回之后再发b,TCP ...

嗯,分布式和高并发网络通信的情况下,这些都是问题
引用:zhxh007 发表于 2022-09-19 17:26
我的理解是都按服务端排序,至于到大服务端顺序不一样?这种情况会在什么情况下发生呢?如果是通信是tcp协 ...

首先对于发送a b消息,一般不会等a应答之后才发b。这样效率太低了。
即使我们真的等a返回之后再发b,TCP只能保证单机包是有序的,但后端后很多服务器,不同服务器时间也不是完全一致的。所以服务端时间也不一定一致。
引用:zhxh007 发表于 2022-09-19 17:26
我的理解是都按服务端排序,至于到大服务端顺序不一样?这种情况会在什么情况下发生呢?如果是通信是tcp协 ...

没必要纠结成这样,因为往往在真正实现的时候,并不是你想的这样,建议考虑的差不多了直接动手实现就好了。im这种东西,就没有做的完的事
我的理解是都按服务端排序,至于到大服务端顺序不一样?这种情况会在什么情况下发生呢?如果是通信是tcp协议,自然保证有序,还有就是正常情况下,如果a消息发送没有收到应答不成功,那么b消息应该阻塞,如果a消息显示叹号,b消息发送成功了,a消息再手动重试的情况下,对于发送者来讲,顺序是a,b,对于接受者来讲,顺序是b,a也能说的通,因为a是你在b之后才发送成功的
引用:营业中 发表于 2022-09-19 11:15
好的谢谢。我之前看很多文章,只谈到了群聊按服务端时间排序;单聊先按服务端时间、再按客户端时间。所以 ...

本质是为了保证客户端的阅读体验,至于具体什么方法,就看怎么权衡,没有固定的办法的
引用:JackJiang 发表于 2022-09-19 11:01
排序逻辑还是尽量在客户端做,说白了,是否排序影响的是客户端的阅读体验,对服务端来说,最要紧的是保证 ...

好的谢谢。我之前看很多文章,只谈到了群聊按服务端时间排序;单聊先按服务端时间、再按客户端时间。所以很好奇,可能也是考虑到群聊计算顺序比较复杂
引用:营业中 发表于 2022-09-19 10:49
那我理解这边实际上是先用服务端时间戳对所有人进行排序,然后对相同用户,再根据客户端时间戳来排序?这 ...

排序逻辑还是尽量在客户端做,说白了,是否排序影响的是客户端的阅读体验,对服务端来说,最要紧的是保证性能。如果服务端为了严格顺序,使用有向环或队列这种机制,那肯定会影响并发性能,必竟顺序和并发本身就是矛盾的
引用:JackJiang 发表于 2022-09-17 22:59
A发送的a, b两条消息,它的本地时间肯定是有先后顺序的

那我理解这边实际上是先用服务端时间戳对所有人进行排序,然后对相同用户,再根据客户端时间戳来排序?这样计算消耗会不会比较大?
A发送的a, b两条消息,它的本地时间肯定是有先后顺序的
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部