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



我正在寻找一种在创建属性之前将属性添加到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接口进行连接。

最新更新