Netty的流水线(即ctx.foo() vs ctx.channel.foo())以前曾在StackOverflow上解释过两次:
然而,我不理解Netty关于何时使用不同方法的例子背后的直觉:
public void channelActive(ChannelHandlerContext ctx) {
ctx.read(); // <----- HERE
}
public void channelRead(final ChannelHandlerContext ctx, Object msg) {
inboundChannel.writeAndFlush(msg).addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) {
if (future.isSuccess()) {
ctx.channel().read(); // <----- HERE
} else {
future.channel().close();
}
}
});
}为什么在代理的channelActive处理程序中使用“from this handler down”样式read,而在channelRead中使用'from top‘style read
发布于 2017-08-16 06:03:59
当使用ChannelHandlerContext.read()时,它将从ChannelPipeline中的ChannelHandler位置开始。当您使用Channel.read()时,它将从ChannelPipeline的尾部开始,因此需要以更糟糕的方式遍历整个ChannelPipeline。
本例之所以在channelActive(...)中使用channelActive(...),但在ChannelFutureListener中使用channel.read(),是因为ChannelFutureListener不是ChannelHandler的一部分,因此需要从ChannelPipeline的尾部开始。还请注意,这里的Channel是不同的。
https://stackoverflow.com/questions/45702133
复制相似问题