我对Netty 4.1.32中的channel.close()
和channel.deregister()
使用NioSocketChannel
有疑问。
我已经注意到,channel.close()
返回的前途一旦关闭了底层套接字,就在注销管道并从中删除处理程序之前完成了。
我有一个用例,必须等待所有处理程序被删除。我注意到,可以通过在channel.deregister()
的将来完成之后显式调用channel.close()
并等待deregister()
返回的将来来完成此操作。但是,这导致了另一个问题:channel.deregister()
不会在管道中触发channelInactive()
,并且还会阻止前面的channel.close()
调用channelInactive()
。
这是故意的吗?如果是这样,您是否可以建议关闭通道并安全地等待其管道完全拆除,从而保持生命周期事件的正常进行? (我确实有一些想法,例如将处理程序放在管道的前面并等待其handlerRemoved()
,或者以某种方式进入管道的HeadContext
,但我真的不喜欢它们中的任何一个)
答案 0 :(得分:0)
我认为您建议的方法基本上是唯一的方法(添加处理程序,然后等待handlerRemoved(...)。