如何在Redis数据库或任何其他解决方案中存储netty Channel对象?

时间:2017-01-03 14:58:41

标签: java redis netty

因为我正在使用netty来进行聊天应用。因为我有netty服务器集群。

因为我在Redis中存储所有客户端的通道ID,以引用连接到netty服务器的所有通道。

我想将所有Channel对象存储到Redis,以便从任何节点或实例我可以获得所有客户端Channel对象,因为如果我想获取其他客户端的节点在其他节点上创建的Channel,如何获取这些客户端驻留在其他节点或实例上的Channel对象?

因此最好将客户端Channel对象存储到redis,因此从任何节点都可以获得任何客户端Channel对象。但是Channel实现类在netty中不是Serializable。

  1. 那么如何在Redis中存储Channel对象?
  2. 通过扩展Channel来序列化Channel对象是个好主意 对象和实现Serializable接口?
  3. 如果此解决方案不好,那么如何获取任何客户端频道 来自netty集群中任何节点的对象?
  4. 感谢。

2 个答案:

答案 0 :(得分:0)

Netty中的频道包含所有网络方面(套接字,nio支持,tcp或udp或...),因此您无法对其进行序列化(网络连接无法序列化)。

但您可以序列化远程地址。但请注意,“id”不可配置,这意味着您无法强制将其值用于一个通道。所以你可以使用类似的东西:

在Redis中:(你的id是关键)

  • 你的身份
  • 远程主机地址(可能是端口)
  • 上下文的任何数据

在您的JVM(节点)中:(映射您的id是密钥的地方)

  • 你的身份
  • 频道对象

答案 1 :(得分:0)

不,您可以在 Redis 以外的 Map 中存储或持久化 Netty 通道。因为通道对象是不可序列化的。