在创建之前将属性添加到频道

时间:2018-12-19 06:43:17

标签: java netty

我正在寻找一种在创建属性之前将属性添加到Channel的方法。

原因是我需要将Channel与某个任意对象相关联,以便能够从通道中获取对象(例如,在channelActive()方法中,我拥有{{ 1}},我需要关联的对象。

Channel公开了attr()方法,但是以此方式添加的属性可用于由此Bootstrap实例创建的所有通道。

另外,在创建频道之后添加属性是有问题的,因为在添加属性之前可能会调用Bootstrap方法。

2 个答案:

答案 0 :(得分:0)

通过Bootstrap.attr(...)添加将使属性在channelActive(...)中可用,因为该属性是在调用fireChannelActive()之前设置的。

如果您不想使用此方法,也可以只添加覆盖ChannelInboundHandler的{​​{1}}并在其中自己添加属性。

答案 1 :(得分:0)

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

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,而是创建并注册Channel,并使用Channel接口进行连接。