【问题标题】:Netty Client/Server be made aware about channel break within ms让 Netty 客户端/服务器了解 ms 内的通道中断
【发布时间】:2018-09-23 13:22:28
【问题描述】:

我的应用程序中有一个 netty 服务器,而 netty 客户端是微服务之一。为了对这个特定的微服务进行健康检查,Netty 客户端(微服务)与我的应用程序建立连接并创建一个 Netty 通道。首次连接通道时会进行少量元数据交换,之后偶尔会进行一些数据交换。 Channel 帮助我们不断识别微服务的正常运行时间。

我们面临的问题是: 一种。如果服务器停电会发生什么。我的客户多快会知道。我想要这个以 ms 的顺序,如何? 湾。如果我拔出服务器上的 LAN 电缆会发生什么情况。我希望客户在 ms 内了解,我们如何处理?

一般来说,我们预计服务器会宕机,通道会断开连接,客户端会知道,但是客户端会在很久以后才知道,这会导致正常运行时间和连接性方面的许多问题。

有什么方法可以让我的 netty 客户端知道 ms 内的这 2 个断开连接?

同样适用于服务器。即,如果在客户端完成相同的活动并且服务器必须立即知道。

附:我无法在 Netty Client 和 Netty Server 之间打乒乓

【问题讨论】:

    标签: java sockets tcp netty


    【解决方案1】:

    如果没有应用程序级别的支持,您的要求是不可行的。这是因为 TCP 本身的设计性质。

    通过拉 LAN 电缆或断电强制断开连接的性质意味着此事件不会通过网络发送任何数据包,因此无法用于检测此情况

    虽然有一个 TCP 长度为 0 的数据包,但端点不需要对这些数据包进行 ACK 响应,因此也不能依赖这一点。 (即使它受支持,您仍然必须维护适当的超时系统以防止短期数据包丢失(这对长期无害))

    总体而言,您最好的选择仍然是发送那些原始的零长度数据包(不确定如何使用 Netty 执行此操作),如果幸运的话,希望路由上的 1 个路由器返回“ICMP 目标无法到达” ,并在您的协议中构建重试系统。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      相关资源
      最近更新 更多