【问题标题】:How to store netty Channel object in Redis database or any other solution?如何将 netty Channel 对象存储在 Redis 数据库或任何其他解决方案中?
【发布时间】:2017-05-17 17:02:54
【问题描述】:

因为我正在使用 netty 制作聊天应用程序。因为我有 netty 服务器集群。

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

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

所以最好将客户端 Channel 对象存储到 redis,这样我就可以从任何节点获取任何客户端 Channel 对象。但是 Channel 实现类在 netty 中是不可序列化的。

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

谢谢。

【问题讨论】:

    标签: java redis netty


    【解决方案1】:

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

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

    在 Redis 左右:(你的 id 是关键)

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

    在您的 JVM(节点)中:(映射您的 id 为键的位置)

    • 你的身份证
    • 频道对象

    【讨论】:

    • 正如你所说的存储客户端的远程节点地址但是当消息从发送者进入netty服务器并从redis获取接收者节点远程地址时,但是如何将消息传输到该远程节点地址以便它可以被接收者客户端使用吗? AWS 可以使用哪种服务将消息传递到该 netty 节点(从发送方 netty 节点到接收方 netty 节点)或任何其他自定义解决方案?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 2015-10-25
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多