代码之家  ›  专栏  ›  技术社区  ›  manash

在创建之前向通道添加属性

  •  0
  • manash  · 技术社区  · 6 年前

    Channel 在创建它之前。

    原因是我需要将 频道 到某个任意对象,以便我能够从通道中获取对象(例如,在 channelActive() 方法在哪里我有 频道 我需要关联的对象)。

    这个 Bootstrap 公开attr()方法,但以这种方式添加的属性可用于从此方法创建的所有通道 独自创立 例如。

    此外,在创建通道后添加属性也是有问题的,因为 方法可以在添加属性之前调用。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Norman Maurer    6 年前

    添加通过 Bootstrap.attr(...) 将使该属性在中可用 channelActive(...) 正如前面设置的属性一样 fireChannelActive()

    如果不想使用此方法,也可以添加 ChannelInboundHandler channelRegistered(...) 然后自己在那里添加属性。

        2
  •  1
  •   manash    6 年前

    对于需要它的人,这里有一个解决方案:

    ChannelFuture registerFuture;
    try {
        registerFuture = castBootstrap.register().await();
    } catch (InterruptedException e) {
        //Handle the exception
    }
    
    final Channel channel = registerFuture.channel();
    channel.attr(MY_ATTR_KEY).set(/* some value */);
    
    ChannelFuture connectFuture = channel.connect(/* Resolved socket address */);
    

    而不是依靠 Bootstrap 创建 Channel ,上面的代码创建并注册 频道 频道 接口。