我应该在哪里检索 ChannelHandlerContext 以供以后在 Netty 中打开的连接上使用?
Where should I retrieve the ChannelHandlerContext for later use on opened connections in Netty?
documentation of the ChannelHandlerContext
解释说,可以检索 ChannelHandlerContext
供以后使用。我正在使用 Netty 实现基于八卦的成员协议。每个 运行 系统都可以接受和创建连接。有一个 Peer
class,每个连接的对等点都有一个实例。这个节点 class 有一个上下文属性,允许通过它的实例发送消息。在处理服务器连接时保持 ChannelHandlerContext
对我来说是直截了当的,但我不确定在打开连接时应该在何处或何时进行这种检索。有没有推荐的方法来检索和保留 ChannelHandlerContext
?
在我的项目中,我使用的是 ChannelOutboundHandlerAdapter
,它只添加上下文处理程序并从管道中删除自身:
class PeerContextRetriever extends ChannelOutboundHandlerAdapter {
private final Peer peer;
PeerContextActivator(Peer peer) {
this.peer = peer;
}
@Override
public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) throws Exception {
promise.addListener(future -> peer.setContext(ctx));
promise.addListener(future -> ctx.channel().pipeline().remove(this));
super.connect(ctx, remoteAddress, localAddress, promise);
}
}
这是一个很好的方法还是有更好的方法?
handlerAdded(...)
是个好地方。您可以在 ChannelHandler
中覆盖它。最后它并不重要,但 handlerAdded
是第一个被称为
的
documentation of the ChannelHandlerContext
解释说,可以检索 ChannelHandlerContext
供以后使用。我正在使用 Netty 实现基于八卦的成员协议。每个 运行 系统都可以接受和创建连接。有一个 Peer
class,每个连接的对等点都有一个实例。这个节点 class 有一个上下文属性,允许通过它的实例发送消息。在处理服务器连接时保持 ChannelHandlerContext
对我来说是直截了当的,但我不确定在打开连接时应该在何处或何时进行这种检索。有没有推荐的方法来检索和保留 ChannelHandlerContext
?
在我的项目中,我使用的是 ChannelOutboundHandlerAdapter
,它只添加上下文处理程序并从管道中删除自身:
class PeerContextRetriever extends ChannelOutboundHandlerAdapter {
private final Peer peer;
PeerContextActivator(Peer peer) {
this.peer = peer;
}
@Override
public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) throws Exception {
promise.addListener(future -> peer.setContext(ctx));
promise.addListener(future -> ctx.channel().pipeline().remove(this));
super.connect(ctx, remoteAddress, localAddress, promise);
}
}
这是一个很好的方法还是有更好的方法?
handlerAdded(...)
是个好地方。您可以在 ChannelHandler
中覆盖它。最后它并不重要,但 handlerAdded
是第一个被称为