gpt4 book ai didi

netty - 在 Netty 4 中,ctx.close 和 ctx.channel.close 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 15:06:57 26 4
gpt4 key购买 nike

有什么区别吗?是 ctx.close只是 ctx.channel.close 的较短版本?

最佳答案

假设我们在管道中有三个处理程序,它们都拦截 close()操作,并调用 ctx.close()在里面。

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()将触发C.close() , B.close() , A.close() ,然后关闭 channel 。
  • ChannelPipeline.context("C").close()将触发B.close() , A.close() ,然后关闭 channel 。
  • ChannelPipeline.context("B").close()将触发A.close() ,然后关闭 channel 。
  • ChannelPipeline.context("A").close()将关闭 channel 。不会调用任何处理程序。

  • 所以,什么时候应该使用 Channel.close()ChannelHandlerContext.close() ?经验法则是:
  • 如果您正在编写 ChannelHandler如果想关闭处理程序中的 channel ,请调用 ctx.close() .
  • 如果您从处理程序外部关闭 channel (例如,您有一个不是 I/O 线程的后台线程,并且您想关闭来自该线程的连接。)
  • 关于netty - 在 Netty 4 中,ctx.close 和 ctx.channel.close 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21240981/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com