I noticed that the ctx is different from handler to handler even these handlers are in the same pipeline, for example
p.addLast("myHandler1", new MyHandler1());
p.addLast("myHandler2", new MyHandler2());
in MyHander1
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
System.err.println("My 1 ctx: " + ctx + " channel: " + ctx.channel());
super.channelRead(ctx, msg);
}
in MyHandler2
@Override
protected void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
System.err.println("My 2 ctx: " + ctx + " channel: " + ctx.channel());
}
and the output:
My 1 ctx: io.netty.channel.DefaultChannelHandlerContext@ba9340 channel: [id: 0xdfad3a16, /127.0.0.1:60887 => /127.0.0.1:8090]
My 2 ctx: io.netty.channel.DefaultChannelHandlerContext@1551d7f channel: [id: 0xdfad3a16, /127.0.0.1:60887 => /127.0.0.1:8090]
I noticed that the ctx is different but the channel is the same one
So it there any difference between invoke ctx.write() and ctx.channel().write() ?
Yes there is... Channel.write(..) always start from the tail of the ChannelPipeline and so pass through all the ChannelOutboundHandlers. ChannelHandlerContext.write(...) starts from the current position of the ChannelHandler which is bound to the ChannelHandlerContext and so only pass those ChannelOutboundHandlers that are in front of it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With