Netty—fireChannelXXX()用法

netty的channel处理链是一个pipline的结构,如果可以把它理解为是一道道的水坝,每经历一层过滤链的时候,我们可以决定是否需要将这些数据透给下一层水坝,而fireChannelXXX的方法就是用于这个逻辑的。

例如:

handle2:

public class TestServerHandler2 extends ChannelInboundHandlerAdapter {
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("6666");
    }

}

handler1:

public class TestServerHandler2 extends ChannelInboundHandlerAdapter {
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("6666");
ctx.fireChannelActive();
}

}

initializer:

public class TestChannelInitializer extends AbstractServerInitializer {
    @Override
    public void addHandler(SocketChannel socketChannel) {
        socketChannel.pipeline()
                .addLast(new TestServerHandler2())
                .addLast(new TestServerHandler());
    }
}

注释:

在initializer添加handler的时候,执行顺序为先执行TestServerHandler2 -> TestServerHandler,而如果我们不在TestServerHandler2中添加fireChannelActive的时候,那么TestServerHandler的打印就不会生效。因为,TestServerHandler2阻塞了TestServerHandler接受channelActive的消息。