我最近遇到了一个问题,TCP 服务器和客户端之间的中间链路出现故障。如果主服务器宕机,客户端需要连接到辅助服务器。当主服务器被关闭时(例如,通过在终端上执行 ^C),TCP 关闭序列会通过,并且客户端成功检测到断开的链接并尝试辅助服务器。然而,如果中间链路发生故障,客户端和服务器将不会意识到这一点。客户端可以检测到的唯一方法是其 TCP 缓冲区何时被失败的“发送”操作填满。
作为此问题的解决方案,已使用“TCP Keepalive”机制。这工作令人满意。
我的问题是“TCP Keepalive”是唯一的解决方案吗?
-Prabhu
Keepalive 旨在处理所谓的半打开连接,即其中一侧(通常是接收请求的服务器)不知道连接已断开。客户端通常知道这一点,因为尝试向服务器发送请求将返回错误。
另一种选择是保持侦听器运行 - 当客户端检测到通信问题时,它只是尝试再次连接到服务器。服务器获取传入的连接,检查它是否来自同一IP地址,如果是,则关闭打开的连接并建立一个新的连接。
但是,如果客户端不知道连接断开并且服务器需要发送某些内容,则除了 TCP keepalive 之外,服务器无法重新建立连接。
如果你不想使用keepalive,你可以使用应用程序级别的keepalive,例如发送诸如特定于应用程序的回显消息之类的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)