2012-04-03 114 views
11

具体而言,我对通道的另一端意外死亡(例如进程被终止)的情况感兴趣。看起来netty不能可靠地触发通道关闭/断开事件,有时它确实有时不会。它也不一定会为连接重置抛出一个SocketException。可以netty可靠地检测通道关闭/断开?

对于它的价值,我也尝试写入频道,但这也继续工作,没有抛出异常或触发任何其他事件。

我在windows上测试这个,netty 3.3.0.Final,如果这有什么区别。

回答

5

在某些情况下,正如你声称净通道无法检测通道是否关闭。 Here与此问题中提到的问题相同。 解决问题的一种方法是使用heartbeat messages。 Netty支持IdleStateHandler的心跳。

你也可以查看这些参考IdleStateHandler:

+0

一个问题是,网状欢快地继续写入到已经在其他被关闭的通道结束。是唯一能够可靠地检测到心跳信号并期望得到响应的方法? – 2012-04-03 20:06:02

+0

如果您手动对连接进行整理,它应该可以正常工作。有可能是alternatIve方式来检测断开连接,但这是netty的文件。我的第二个建议是检查并阅读关于Channel的setReadable和isWritable方法。您可以用制作商内的Channel.isWritable控制频道状态,并使用频道内的Channel.setReadable使频道可读。我不确定,但这最后一招可能是工作。 – ozhan 2012-04-04 00:03:26

相关问题