引用:copuzzle 发表于 2025-09-03 09:15 正常的逻辑肯定是客户端发出一次请求(这不需要讨论,否则一定是个烂方案),服务端来完成比对,而且服务端借助缓存或数据库工具本身的语法去实现,比客户端要经济多了 |
引用:JackJiang 发表于 2025-09-02 18:20 现在是客户端设计是这么样去做的,每个会话会记录最大一条 id, 后面只需要请求差量信息。 但获取有更新的会话列表是个麻烦事,所以现在设计上瓶颈在这里,如果不增加后端的复杂度,那么用户例如有 1000 个会话,就需要向服务端发出至少 1000 次对比请求,这个量还是比较大的。 所以才会提到,服务端提供某种缩小这个数据量的机制。 |
|
我理解你的意思,基本上im这些相关的业务和需求都没有标准的实现方式,主要是看能适合自已场景的就是最好的 微信之所以增量更新做的好,原因是它是扩散写,这也是为什么微信群限制最多500人的一个很重要的原因。 你的同步方案,我的建议就是一定要简单,比如既然是要聚焦客户端的缓存实现,那就把技术思路放在客户端,尽量不要给服务端增加复杂性,这样的话服务端越简单它后绪可优化的操作空间就越大。 建议,可以考虑在客户端给每个会话添加最后一条消息的时间戳记录(甚至不需要单独记录,每个会话的最后一条消息的时间它就是最后一条消息的时间戳),然后用这个时间去跟服务端比对,晚于这个消息的就是需要增量拉取的 |
|
Hi, 我有个场景是用户有好些大群,像 discord 吧,特点是一个群有几十万到百万人,不过在线的人数倒不多,可能几万吧, 基于这种场景,目前服务端使用了读扩散模式,消息存储也是使用的会话群/会话为单位,也就是说获取消息之前都是以会话为单位的。 那么在这种情况下,客户端就会碰到这样的问题,如:一个用户加入了一千个群,他更新了 app 登入手机(或者是杀掉后重新进入应用) 1.客户端需要获取哪些会话有更新,这个列表怎么获取更好 2.客户端需要同步下来那些会话有更新的新消息,每个会话需要请求一次差量消息同步 目前的想到的方案是: 对于会话的消息同步, 1.还是需要以每个会话作为单位去同步消息,不过提供批量接口 2.从服务端获取有消息更新的会话列表(有数量差异更好),在服务端维护 群-最新消息 和 用户-加入群 的表,请求时候的根据用户的全局最大 id , 来 join 计算差异。 我想问的是,有没有更好的协议,或者结构,可以让客户端的这个过程效率更高一些? 因为像微信,它是有一个全局的消息序列,一个同步请示就可以实现会话列表和会话里消息 |