默认
发表评论 11
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议

我这里有一个方案,使用Bitmap数据结构保存用户的在线状态,读取状态时间复杂度为o(1),空间复杂度一个用户占用1个bit位,也就是说在占用极低的内存的情况下又可以得到一个o(1)的时间复杂度,真是鱼和熊掌兼得。在这样的一个数据结构的加持下,立马可以为当前消息应该路由到哪一台IM服务器上提供了一个方案,IM集群的最大问题就解决了。我画个图(宿舍电脑没有visio,就用手画了)。



我觉得这个设计有一个弊端。你是一个多服务。如果其中一台服务挂了。在bitmap中的数据就不一致了。我觉得可以通过hash结构存redis。结构为<userId,userInfo>。设置一个有效时间。每次客户端心跳时候都主动去更新这个时间。利用redis中的hyperloglog统计存在的key值。即可统计目前在线的人数。
签名: 嘿嘿嘿
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部