默认
发表评论 3
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教关于IM用户信息和群聊信息缓存的差异更新和拉取问题
一、经过资料查询,本人能够理解通讯录可以每次上线的时候增量拉取,但是服务端往往返回的只是好友的id,那么此时客户端如果有100个好友,是不是又要去服务端拉取这100个用户的信息呢?如果本地数据库存了10个,剩下90是不是也要去服务端拉取?拉取成功,后续这些用户的头像和昵称变了,又用什么方式更新客户端本地的头像和昵称呢?群成员同理。

二、拉取我加入的群。这点如何设计好一些,一个是群信息表(id,name)。群成员表(gId,memberId).如果想更新客户端本地的我加入的群聊列表,用怎么设计这个系统会好一些?自己有一些思路,但是总感觉有缺陷。求经验丰富的同事解答。

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

上一篇:服务端的Session可以存放在Redis中实现集群吗?下一篇:求解IM群聊中消息排序的问题,到底按什么排序合适
推荐方案
评论 3
1、拉取的时候就直接拉取整个用户信息就好了,没必要分用户id和信息两次拉

2、可以先拉id,再异步拉取成员信息(微信大致也是这样,这也是你为什么看到一个新群,首次进入时看到的都是对方的微信id而不是昵称,微信会在后台异步拉取并实时更新)。

如果产品要简单先做出来的话,就简单一点,每次拉全量,先别管那么多了,后面再慢慢优化好了,一开始别想的这么细,im的事情是做不完的
引用:JackJiang 发表于 2022-09-09 11:03
1、拉取的时候就直接拉取整个用户信息就好了,没必要分用户id和信息两次拉

2、可以先拉id,再异步拉取成 ...

关于第一点:我发现微信应该不是拉取整个用户信息的。我小号改了头像和昵称,大号再上来看,列表里面的头像和昵称不会改变,只有真正点进去的时候,头像和昵称会闪烁一下变成新的。所以我猜测有可能是没有分开拉取,只拉取了列表,详情只有特定场景才会拉取。
第二点:我想求助一下,我如果想增量拉取我加入的群聊,怎么设计好一些,因为好友列表有最后更新的时间戳,但是群列表的话,需要去群成员表拉一次List<String> groupId,再从这些groupId中找出最小的更新时间和客户端本地最后更新时间作对比吗?站长或其他同事有没有更好的方案?总感觉这个想法还有优化空间,能力有限,需要人指点一二。
引用:frfr46467979 发表于 2022-09-09 11:41
关于第一点:我发现微信应该不是拉取整个用户信息的。我小号改了头像和昵称,大号再上来看,列表里面的头 ...

1、这主要是触发更新的时机,不可能也没必要对方改一下马上实时通知你这边来刷新。因为从用户角度来看,他到底什么时候更新的,无所谓的,因为对方并不是当着你面来更新的,你无法知道他已经修改过什么,所以也不会有什么期待,所以懒更新策略没问题。

2、你可以为每个群加一个缓存更新时间吧,可以在登陆时懒更新一下。不过,平时的加群、退群什么的,这些需要实时更新,不然就影响体验了。

不知道我说的,是不是你想要知道
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部