在Netty中关闭频道并等待其处理程序被删除

时间:2019-06-25 10:49:36

标签: netty

我对Netty 4.1.32中的channel.close()channel.deregister()使用NioSocketChannel有疑问。

我已经注意到,channel.close()返回的前途一旦关闭了底层套接字,就在注销管道并从中删除处理程序之前完成了。

我有一个用例,必须等待所有处理程序被删除。我注意到,可以通过在channel.deregister()的将来完成之后显式调用channel.close()并等待deregister()返回的将来来完成此操作。但是,这导致了另一个问题:channel.deregister()不会在管道中触发channelInactive(),并且还会阻止前面的channel.close()调用channelInactive()

这是故意的吗?如果是这样,您是否可以建议关闭通道并安全地等待其管道完全拆除,从而保持生命周期事件的正常进行? (我确实有一些想法,例如将处理程序放在管道的前面并等待其handlerRemoved(),或者以某种方式进入管道的HeadContext,但我真的不喜欢它们中的任何一个)

1 个答案:

答案 0 :(得分:0)

我认为您建议的方法基本上是唯一的方法(添加处理程序,然后等待handlerRemoved(...)。