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的消息。