can netty可靠地检测通道关闭/断开?

时间:2012-04-03 06:44:48

标签: netty

具体而言,我对通道的另一端意外死亡(例如,进程被杀死)的情况感兴趣。似乎netty无法可靠地触发通道关闭/断开事件,有时它会发生,有时它不会。它也不一定会为连接重置抛出SocketException。

为了它的价值,我也尝试写入频道,但这也继续工作,不会抛出异常或解雇任何其他事件。

我在Windows上测试这个,netty 3.3.0.Final,如果这有任何区别。

2 个答案:

答案 0 :(得分:1)

如果一个通道在没有发送关闭的情况下断开连接,则无法检测到它。通常,检测到断开连接(如果需要)的最佳方法是每隔x秒定期在通道上发送心跳事件。使用IdleStateHandler,如果您在心跳+增量后仍未收到心跳,则会强制断开通道。

答案 1 :(得分:0)

尝试使用 ChannelInboundHandlerAdapter 类中的 channelUnregistered 方法。

public void channelUnregistered(ChannelHandlerContext ctx) throws Exception {
  ctx.fireChannelUnregistered();
  //Your logic goes here...
}