【问题标题】:can netty reliably detect channel close/disconnect?netty 可以可靠地检测通道关闭/断开连接吗?
【发布时间】:2012-04-03 06:44:47
【问题描述】:

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

对于它的价值,我也尝试过写入频道,但这也可以继续工作而不会引发异常或触发任何其他事件。

我正在 Windows 上使用 netty 3.3.0.Final 对此进行测试,如果这有什么不同的话。

【问题讨论】:

    标签: netty


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多