java—如何在redis数据库或任何其他解决方案中存储netty channel对象?

z3yyvxxp  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(1039)

因为我使用netty来制作聊天应用程序。因为我有netty服务器集群。
因为我在redis中存储了所有客户机的通道id,以便引用连接到netty服务器的所有通道。
我想把所有的通道对象都存储到redis中,这样我就可以从任何节点或示例中获取所有的客户端通道对象,因为如果我想获取在其他节点上创建的其他客户端通道,那么如何获取驻留在其他节点或示例上的那些客户端通道对象呢?
所以最好将客户机通道对象存储到redis,这样我就可以从任何节点获得任何客户机通道对象。但通道实现类在netty中是不可序列化的。
那么如何在redis中存储channel对象呢?
通过扩展通道对象和实现可序列化接口来序列化通道对象是个好主意吗?
如果这个解决方案不好,那么如何从netty集群中的任何节点获取任何客户机通道对象?
谢谢。

dz6r00yl

dz6r00yl1#

netty中的channel隐式地包含所有网络方面(socket、nio支持、tcp或udp或……),因此您不能序列化它(网络连接不能序列化)。
但是你可以序列化远程地址。但是请注意,“id”是不可配置的,这意味着您不能为一个通道强制其值。所以你可能会用到:
在redis中:(你的id是钥匙)
你的身份证
远程主机地址(和端口)
上下文的任何数据
在jvm(节点)中:(Mapid是键的位置)
你的身份证
通道对象

相关问题