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

时间:2015-02-14 18:11:44

标签: netty

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

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

1 个答案:

答案 0 :(得分:10)

您可以使用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
    }
}