Netty能否可靠地检测到通道关闭/断开连接?

12

我特别关注的是对端意外关闭(例如进程被杀)的情况。似乎Netty并不可靠地触发通道关闭/断开连接事件,有时会触发而有时则不会。此外,它也不一定会因为连接重置而抛出SocketException异常。

值得一提的是,我还尝试向通道写入数据,但这样做仍然能够正常工作,而没有抛出任何异常或触发其他事件。

如果有区别的话,我是在Windows上使用Netty 3.3.0.Final进行测试的。

2个回答

1
如果一个通道在没有发送关闭的情况下断开连接,就无法检测到它。通常,如果需要检测断开连接,最好的方法是每 x 秒定期通过通道发送心跳事件来检测。使用 IdleStateHandler,如果在心跳时间加上一个增量后仍未收到心跳,则强制断开该通道。

0
尝试使用ChannelInboundHandlerAdapter类中的方法channelUnregistered。
public void channelUnregistered(ChannelHandlerContext ctx) throws Exception {
  ctx.fireChannelUnregistered();
  //Your logic goes here...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接