当我尝试使用 closeFuture() 关闭 io.netty.channel.Channel 时,Netty 应用程序挂起

Posted

技术标签:

【中文标题】当我尝试使用 closeFuture() 关闭 io.netty.channel.Channel 时,Netty 应用程序挂起【英文标题】:Netty app hangs when I try to close a io.netty.channel.Channel using closeFuture() 【发布时间】:2014-08-05 21:23:52 【问题描述】:

当我尝试关闭 io.netty.channel.Channel TCP/IP 客户端连接时,我的 Netty 应用程序挂起。

我愿意:

ch.isOpen(); //this is TRUE
ch.closeFuture().sync(); //never returns

调用同步的线程的堆栈跟踪在这里。

JavaFX Application Thread@583, prio=5, in group 'main', status: 'WAIT'
at java.lang.Object.wait(Object.java:-1)
at java.lang.Object.wait(Object.java:502)
at io.netty.util.concurrent.DefaultPromise.await(DefaultPromise.java:260)
at io.netty.channel.DefaultChannelPromise.await(DefaultChannelPromise.java:129)
at io.netty.channel.DefaultChannelPromise.await(DefaultChannelPromise.java:28)
at io.netty.util.concurrent.DefaultPromise.sync(DefaultPromise.java:224)
at io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:117)
at io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:28)
at MyClient.stop(MyClient.java:46)

有什么东西可以阻止频道关闭吗?我可以用另一种方式强制它关闭吗?

【问题讨论】:

Bootstrap b = new Bootstrap(); b.bind(port).sync().channel().closeFuture().await(); 通常你将一个通道绑定到引导程序。 【参考方案1】:

closeFuture.sync() 不是用于关闭 Channel,而是允许您阻塞直到 Channel 关闭。要关闭 Channel,您可以调用 Channel.close()。

【讨论】:

完全正确!我以为我也尝试过 close() 但显然不是因为它像宣传的那样工作。非常感谢。

以上是关于当我尝试使用 closeFuture() 关闭 io.netty.channel.Channel 时,Netty 应用程序挂起的主要内容,如果未能解决你的问题,请参考以下文章

Netty入门——组件(Channel)二

以编程方式关闭 netty

使用 glutBitmapCharacter() 绘制文本关闭 opengl 程序

如何使用命令提示符 (cmd) 在 Windows 中列出文件。我尝试在 Linux 中使用“ls”,但它显示错误? [关闭]

当我尝试关闭模式时 iOS 崩溃

valueerror: 生成 csv 文件并在 django 中保存到模型时对已关闭文件的 i/o 操作