默认
发表评论 11
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
1、评什么redis能存几十几百G的数据,java不能?
2、Redis里可以存用户id以及用户所连接im的实例信息,但不能直接存Netty的Session对象,因为存了也没意义。对于网络通信来说,能与客户端通信的,只能是直接与它连接的im实例,这是常识了。
评论 11
引用:aihe521 发表于 2022-08-30 23:12
Java存储几十几百G应该靠的是集群吧;

如果Session存在单机上,发送C2C消息的时候,首先用Redis获取到 ...

RPC、MQ都可以
引用:LFC 发表于 2022-09-09 01:02
我这里有一个方案,使用Bitmap数据结构保存用户的在线状态,读取状态时间复杂度为o(1),空间复杂度一个用 ...

"在判断用户在哪台服务器上时,需要遍历服务器来判断用户到底在哪台服务器上":没明白,为什么要遍历?
引用:LFC 发表于 2022-09-09 17:56
假设有n台服务器,判断用户在哪台机器上就是下面这个伪代码的逻辑
[mw_shl_code=java,true]for(IMServer ...

搞个集中式的key=userid,value=serverid,这样的列表管理在线用户
1、ConcurrentMap存的只是channel引用,相当于指针,地个内存地址而已,要是因为它搞出OOM,那这里面存的数据量那大的吓人。。。

2、不能,IM的连接是长连接,是不能存在集中式的redis这样的东西里面。

如果想写im集群的话,你可以从下面的文章和代码中先学习一下:

跟着源码学IM(四):拿起键盘就是干,教你徒手开发一套分布式IM系统
跟着源码学IM(九):基于Netty实现一套分布式IM系统
跟着源码学IM(十):基于Netty,搭建高性能IM集群(含技术思路+源码)
跟着源码学IM(十一):一套基于Netty的分布式高可用IM详细设计与实现(有源码)
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部