默认
发表评论 8
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?别走弯路了... 找站长给点建议
[已回复] MobileIMSDK服务端想做集群, jack哥有什么好的建议呢?
阅读(30442) | 评论(8 收藏 淘帖
目前后端服务端是用java springBoot, 把mobileSDK打成jar包在项目里用maven引用的---现在问题是服务端想做集群, 遇到几个问题:

1. SDK底层是用map记录的用户对应的channel, 如果是两台服务器的话, 用户的channel可能在两台中的一个, 是不是就不能用map了啊

2. SDK从消息接收到转发出去, 都是在本机查询channel进行发送的, 如果现在用户A的channel是建立在服务器1, 用户B的channel是建立在服务器2, 现在A要和B发消息, 是不是要改很多SDK的源码啊? 具体有哪些地方会被影响呢? ACK应答包, SDK里面循环检测消息是否需要重发等逻辑都需要修改吗?

如果想做集群, jack哥有什么好的建议呢?或者说有没有必要做集群?

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

上一篇:[已解决] 求教MobileIMSDK的H5端发送ws消息,服务器没有收到消息下一篇:[已回复] 如何从MobileIMSDK中的Protocal对象获取与dataContent同级参数
推荐方案
评论 8
im的集群那就很麻烦了。

1、你要改造成多实例,最直观的就是将在线用户所处的im实例信息存在redis里;

2、发送消息时,通过第“1”步里的redis读取该用户所在的im实例是哪个,然后通过比如:MQ或RPC向这个im实例发送消息的请求(再由这个im实例发送给连接在它上面的客户端)。

你要么把这几篇文章好好读一读,找找思路:

引用:JackJiang 发表于 2025-11-13 19:05
im的集群那就很麻烦了。

1、你要改造成多实例,最直观的就是将在线用户所处的im实例信息存在redis里;

1、能不能具体点sdk需要改那些实例,能大概列一个清单吗?改难度大吗?

架构的东西我后面再认真学习一下, 现在就是想了解mobileSDK本身需要的改动大吗?
引用:休清 发表于 2025-11-13 20:05
1、能不能具体点sdk需要改那些实例,能大概列一个清单吗?改难度大吗?

架构的东西我后面再认真学习一 ...

如果你对分布式的东西熟悉,改动的难度不大,因为需要的技术能是常规的分布式玩法。比如redis、zookeeper、MQ、RPC等等,如果你对这些没有概念,建议不要贸然动手,Im长连接分布式不是http短连接这种所谓的微服务,难度主要在于它必须时刻为每个端维护一个实时、可靠的长连接。

具体到MobileIMSDK的代码,你需要改造的主要是OnlineProcess、LocalSendHelper等。
支持下
引用:JackJiang 发表于 2025-11-13 19:05
im的集群那就很麻烦了。

1、你要改造成多实例,最直观的就是将在线用户所处的im实例信息存在redis里;

jack 老师您好,我看了一些文章,总结了四个im集群消息投递的方法,还望指点一二!。
一、在im集群开放api,给逻辑层进行rpc/http调用,把消息投递到接收消息的用户所在服务器上,比如融云就是这样做的,还有一篇文章设计的login服务也是,开放api给router服务调用。
二、采用mq转发的方法,在mq创建以im集群机器的机器号为命名的主题,然后每台机器订阅自己名字的主题,转转就是那么做的。
三、redis 的发布\订阅,或者把redis当成一个消息队列使用(但是看您觉得这种方法有单点瓶颈)
四、客户端与网关进行长链接之外,sdk 与网关也进行长连接(emmmm)
引用:helloc 发表于 2026-05-14 21:22
jack 老师您好,我看了一些文章,总结了四个im集群消息投递的方法,还望指点一二!。
一、在im集群开放a ...

1、4 从技术上来说实时最好、体验最佳,但技术难度高。2、3会受第3方中件间的影响,包括实时性、负载能力、稳定性等等都受中间件本身的能力以及开发者的运维能力影响,但技术难度相对小的多。所以需要你自已按你们的情况去权衡
引用:JackJiang 发表于 2026-05-15 10:21
1、4 从技术上来说实时最好、体验最佳,但技术难度高。2、3会受第3方中件间的影响,包括实时性、负载能力 ...

好的,谢谢jack老师
引用:helloc 发表于 2026-05-15 14:16
好的,谢谢jack老师

不客气
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部