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



我有一个关于使用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>

最新更新