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