Netty Client / Server可以在ms

时间:2018-04-13 08:35:43

标签: java sockets tcp netty

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

我们面临的问题是: 一个。如果服务器断电会发生什么。我的客户会多快知道。我想按ms的顺序这个怎么样? 湾如果我拔出服务器上的LAN电缆会发生什么。我想让客户在ms内知道,我们如何处理这个问题?

一般来说,我们希望服务器会关闭,渠道将断开连接,客户端会知道,但客户后来了解很多,导致正常运行时间和连接方面出现很多问题。

有没有办法让我的netty客户端在ms内知道这两个断开连接?

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

P.S。我不能在Netty Client和Netty Server之间做乒乓球

1 个答案:

答案 0 :(得分:0)

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

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

虽然存在TCP长度为0的数据包,但是不需要端点来响应对这些数据包的ACK,因此也不能依赖它。 (即使它得到支持,你仍然必须保持一个适当的超时系统,以防止短期数据包丢失(这对长期而言无害))

总的来说,你最好的选择仍然是发送那些原始的零长度数据包(不知道如何使用Netty这样做),如果运气好的话,希望路由中的1个路由器返回一个" ICMP Destination无法访问",并在协议中构建重试系统。