我有一个关于使用NioSocketChannel
的Netty 4.1.32中的channel.close()
和channel.deregister()
的疑问。
我已经注意到,一旦关闭了基础插座,在管道放下管道并将其从中删除之前,channel.close()
返回的未来就完成了。
我有一个用例,我必须等待处理程序全部删除。我注意到我可以通过在channel.close()
的未来完成后明确调用channel.deregister()
来实现它,并等待deregister()
返回的未来完成。然而,这引起了另一个问题:channel.deregister()
不会在管道中发射channelInactive()
,并且它也可以防止channel.close()
调用channelInactive()
。
这是打算的吗?如果是这样,您是否可以建议您关闭频道并安全地等待其管道完全拆除,以保持生命周期事件的正常流动?(我确实有一些想法,例如将处理程序放在管道的前部并等待其handlerRemoved()
,或者以某种方式攻入管道的HeadContext
,但我真的不喜欢其中任何一个。(
我认为您建议的是一种方法,这基本上是唯一的方法(添加处理程序,然后等待HandleRremaved(...(。
<</p>