我应该在哪里检索 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 是第一个被称为