我有两个通过TCP/IP进行通信的组件.组件A充当服务器/侦听器,组件B充当客户端.两者应该尽快沟通.任何时候都只能有一个连接(尽管这个问题不在此处).我公司的一位高级开发人员表示,我需要在两个组件之间使用应用程序级心跳,以确保连接保持打开状态.
我认为连接保持开放与TCP/IP,但我读过许多博客/网站,说这些应用程序之间的心跳是非常标准的做法.
我知道组件A心跳组件B的部分原因是,如果组件B存在通信问题(链路断开或组件B未运行),它可以通知支持.是否因任何其他原因需要心跳?比如确保经常出现"在管道中"保持开放的东西?
组件A当前每20秒检测一次组件B,如果在120秒内没有从组件B接收到任何内容,则关闭连接.然后,假设如果链路断开,组件B将定期尝试重新连接,则它继续侦听连接.这成功了.
重申我的问题:保持TCP/IP连接存活所需的心跳是否必要?
Ger*_*mbs 48
正如许多其他人所指出的那样,如果留给自己的设备,TCP连接将保持不变.但是,如果您在连接中间有一个跟踪其状态的设备(例如防火墙),则可能需要使用keepalive以防止状态表条目过期.
Eer*_*nen 21
如果您的组件:
那你就不需要心跳了.
如果这些假设中的任何一个都是假的(我正在看着你,GPRS!),心跳变得非常必要.
如果您使用Windows,请谨慎对待TCP Keep-alive.默认情况下,除非您使用Windows注册表或setsockopt全局启用它,否则禁用它.
默认的保持活动间隔为2小时.
http://msdn.microsoft.com/en-us/library/ms819735.aspx
如果不希望2小时保持活着,你可能需要实现自己的心跳并在Windows上禁用TCP keep-alive.
| 归档时间: |
|
| 查看次数: |
78310 次 |
| 最近记录: |