我正在寻找一种在创建属性之前将属性添加到Channel
的方法。
原因是我需要将Channel
与某个任意对象相关联,以便能够从通道中获取对象(例如,在channelActive()
方法中,我拥有{{ 1}},我需要关联的对象。
Channel
公开了attr()方法,但是以此方式添加的属性可用于由此Bootstrap
实例创建的所有通道。
另外,在创建频道之后添加属性是有问题的,因为在添加属性之前可能会调用Bootstrap
方法。
答案 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
接口进行连接。