【发布时间】:2019-06-26 03:39:43
【问题描述】:
我有一个关于在 Netty 4.1.32 中使用 NioSocketChannel 的 channel.close() 和 channel.deregister() 的问题。
我注意到channel.close() 返回的未来在底层套接字关闭后完成,然后管道被取消注册并从中删除处理程序。
我有一个用例,我必须等待处理程序全部被删除。我注意到我可以通过在来自channel.close() 的未来完成后显式调用channel.deregister() 并等待deregister() 返回的未来完成来实现它。然而,这导致了另一个问题:channel.deregister() 不会在管道中触发channelInactive(),它也会阻止前面的channel.close() 调用channelInactive()。
这是故意的吗?如果是,你能推荐一些东西来关闭通道并安全地等待它的管道被完全拆除,保持生命周期事件的正常流动吗? (我确实有一些想法,比如在管道前面放置一个处理程序并等待它的handlerRemoved(),或者以某种方式利用管道的HeadContext,但我不太喜欢它们中的任何一个。)
【问题讨论】:
标签: netty