Is there any difference? Is ctx.close just a shorter version of ctx.channel.close?
Let's say we have three handlers in the pipeline, and they all intercept the close() operation, and calls ctx.close() in it.
ChannelPipeline p = ...; p.addLast("A", new SomeHandler()); p.addLast("B", new SomeHandler()); p.addLast("C", new SomeHandler()); ... public class SomeHandler extends ChannelOutboundHandlerAdapter { @Override public void close(ChannelHandlerContext ctx, ChannelPromise promise) { ctx.close(promise); } } Channel.close() will trigger C.close(), B.close(), A.close(), and then close the channel.ChannelPipeline.context("C").close() will trigger B.close(), A.close(), and then close the channel.ChannelPipeline.context("B").close() will trigger A.close(), and then close the channel.ChannelPipeline.context("A").close() will close the channel. No handlers will be called.So, when you should use Channel.close() and ChannelHandlerContext.close()? The rule of thumb is:
ChannelHandler and wanna close the channel in the handler, call ctx.close().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