【发布时间】:2010-10-26 08:15:42
【问题描述】:
我有两个通过 TCP/IP 进行通信的组件。组件 A 充当服务器/侦听器,组件 B 是客户端。两人应该尽快沟通。任何时候都只能有一个连接(尽管这个问题除外)。我公司的一位高级开发人员说我需要在两个组件之间使用应用程序级心跳来确保连接保持打开状态。
我认为 TCP/IP 的连接保持打开状态,但我阅读了许多博客/网站,说在这些应用程序之间进行心跳是非常标准的做法。
我知道组件 A 检测组件 B 的部分原因,因此如果组件 B 存在通信问题(链接已关闭或组件 B 未运行),它可以通知支持人员。是否出于任何其他原因需要心跳?例如确保经常有“管道中”的东西保持开放?
组件 A 当前每 20 秒对组件 B 进行一次心跳,如果在 120 秒内没有从组件 B 收到任何返回,则关闭连接。然后它继续侦听连接,假设组件 B 将在链接断开时定期尝试重新连接。这成功了。
重申我的问题:是否需要心跳来保持 TCP/IP 连接处于活动状态?
【问题讨论】:
-
这种行为是否也取决于实现?这是 TCP 标准中指定的内容,还是保留为实现细节?希望其他人也能回答这个问题。
-
我会说这是一个实现细节,因为并非所有基于 TCP/IP 的协议都实现它完全取决于您。
-
是的 - 不是因为 TCP/IP - 但由于其他硬件或软件的原因,您的连接可能会通过防火墙和家庭“路由器”,它们往往会丢弃不活动的 TCP 连接,相关:stackoverflow.com/questions/3907537/…