网状.如何在处理程序之间共享对象?

use*_*299 3 netty

哟伙计们.在我的管道中有3个处理程序:

  1. ConnectionHandler
  2. FrameHandler
  3. PacketHandler

在ConnectionHandler中,我创建了一个Session对象.我只需要每个客户端有一个Session对象,这就是我在ConnectionHandler中初始化它的原因,因为channelActive方法每个客户端只调用一次.我希望将该会话传递给PacketHandler.我该怎么做?

Nor*_*rer 11

您可以使用Channel.attr(...).set(...)和Channel.attr(...).get(...)来获取此类内容.检查javadocs.

所以像这样:

public static AttibuteKey<String> MY_KEY = AttributeKey.valueOf("MY_KEY");
public final class ConnectHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void channelActive(ChannelHanderContext ctx) {
        ctx.channel().attr(MY_KEY).set("Whatever");
    }
}

public final class NextHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        String value = ctx.channel().attr(MY_KEY).get();
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)