我正在寻找一种在创建属性之前将属性添加到Channel
的方法。
原因是我需要将Channel
关联到某个任意对象,以便我能够从通道中获取对象(例如,在我有Channel
并且我需要关联对象的channelActive()
方法中)。
Bootstrap
公开了一个 attr() 方法,但以这种方式添加的属性可用于从此Bootstrap
实例创建的所有通道。
此外,在创建通道后添加属性是有问题的,因为在添加属性之前可能会调用channelActive()
方法。
通过Bootstrap.attr(...)
添加将使该属性在channelActive(...)
中可用,因为该属性是在调用fireChannelActive()
之前设置的。
如果您不想使用此方法,也可以添加一个覆盖channelRegistered(...)
的ChannelInboundHandler
并自行添加属性。
对于需要它的人,这里有一个解决方案:
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
接口进行连接。