集群环境下如何缓存 netty-socketio 的客户端连接信息

2021-05-17 10:11:38 +08:00
 Blueming
把单体环境下 netty-socketio 要开发成适合集群化部署。因为要针对特定客户端进行发送信息,所以就要在后端缓存客户端的相关数据,其中就包括 SocketIOClient 对象,想到使用 redis 实现,但这个对象根本不能序列化,放到 redis 中直接报错。
还有什么方法能够实现呢?
1463 次点击
所在节点    Java
2 条回复
linbiaye
2021-05-18 09:44:07 +08:00
这么奇怪的问题,A 机器建立的连接<b>不可能</b>序列化一下,存到 redis,然后 B 机器捞出来反序列化然后就通过连接发数据了。唯一的解法就是给客户端唯一标示,链接建立完了让客户端报自己的标示,然后存到 redis,<标示,我的链接在 A 机器>,然后需要给客户端发消息的给 A 机器发消息,让 A 去做。
xinQing
2021-05-31 09:57:29 +08:00
哈哈,这个我来发个言。我 17 年刚毕业那会儿做基于 websocket ( netty 实现)的连接助手,有 4 台机器( A 、B 、C 、D )。思路是每台机器管理自己的连接。
比如:A 上面有 1,2,3,4 ; B 上面有 5,6,7,8 的连接。当 1 需要给 8 发消息,此时 1 的消息肯定是先发给 A (建立了连接)了,存储消息后,然后 A 发现 8 不再自己的机器上,将消息发给 redis (利用 redis 的发布订阅机器,每台机器都订阅)。A 、B 、C 、D 都收到了消息,D 发现自己上面有 8 的连接,则将消息转发给 8 。
当时做的比较简单,没有做针对性的机器间通讯(利用 redis 、zk 等做全局路由表),比如 A 发现 8 在 D 机器上,直接调用 D 的 rpc 接口。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/777350

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX