1

我在 Java 中实现了我自己的原型,它将通过 TCP 连接使用心跳,我也用它来传输消息和文件。对于客户端,我使用阻塞套接字 I/O。所以这就是我计划的工作方式......我将套接字超时设置为 K 秒,并使心跳保持在间隔 T 内发送消息,以便 T < K。如果超时到期,看起来服务器离线对于客户,反之亦然。

心跳是服务器发送一个字符串,客户端回答另一个。

我不想浪费大量带宽,但是如果超时时间很大,服务器可能会误认为客户端的状态。

什么是好的 K 区间?我在考虑 40 秒

PS:字符串是在 ISO-8859-1 中发送的 8 个字母,所以它的小数据

4

2 回答 2

3

“K”高度依赖于应用程序的特定流量配置文件(例如应用程序数据传输的频率)和应用程序对连接丢失的容忍度(例如接收器需要多快检测连接丢失)。不幸的是,低开销和快速检测是相反的目标。

听起来您试图解决TCP 半开连接问题(RFC 793 含义)。如果是这样,并且如果您不知道“半开放”一词,那么研究 TCP “半开放”可能会为您指明一些有用的信息,例如:

http://www.codeproject.com/Articles/37490/Detection-of-Half-Open-Dropped-TCP-IP-Socket-Conne.aspx

于 2010-09-23T18:06:41.237 回答
1

我认为这里没有通用的“正确”答案,这实际上取决于您的需求。您需要平衡带宽要求和让服务认为客户仍然存在的成本。这些需求因应用程序而异。对于 IM,您可能想在几秒钟内知道,但对于文件传输应用程序,几分钟可能是可以接受的。

于 2010-09-23T17:57:42.023 回答