V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Blueming
V2EX  ›  Java

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

  •  
  •   Blueming · 2021-05-17 10:11:38 +08:00 · 1441 次点击
    这是一个创建于 1283 天前的主题,其中的信息可能已经有所发展或是发生改变。
    把单体环境下 netty-socketio 要开发成适合集群化部署。因为要针对特定客户端进行发送信息,所以就要在后端缓存客户端的相关数据,其中就包括 SocketIOClient 对象,想到使用 redis 实现,但这个对象根本不能序列化,放到 redis 中直接报错。
    还有什么方法能够实现呢?
    2 条回复    2021-05-31 09:57:29 +08:00
    linbiaye
        1
    linbiaye  
       2021-05-18 09:44:07 +08:00
    这么奇怪的问题,A 机器建立的连接<b>不可能</b>序列化一下,存到 redis,然后 B 机器捞出来反序列化然后就通过连接发数据了。唯一的解法就是给客户端唯一标示,链接建立完了让客户端报自己的标示,然后存到 redis,<标示,我的链接在 A 机器>,然后需要给客户端发消息的给 A 机器发消息,让 A 去做。
    xinQing
        2
    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 接口。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5321 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 03:46 · PVG 11:46 · LAX 19:46 · JFK 22:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.