我在Java中实现我自己的proto,它将使用TCP连接的心跳,我也用它来传输消息和文件。 对于客户端,我使用阻塞套接字I / O. 所以这是我计划如何工作...... 我将套接字超时设置为K秒并使心跳保持在间隔T内发送消息,以便T <0。 K. 如果超时到期,则看起来服务器对于客户端是脱机的,反之亦然。
心跳是服务器发送字符串而客户端回答另一个字符串。
我不想浪费大量的带宽,但是如果超时,服务器可能会误认为客户的状态。
什么是良好的K区间?我想的是40秒
PS:字符串是ISO-8859-1中发送的8个字母,因此它的小数据
答案 0 :(得分:3)
“K”高度依赖于应用程序的特定流量配置文件(例如,应用程序数据传输的频率)以及应用程序对连接丢失的容忍度(例如,接收器检测连接丢失的速度有多快)。不幸的是,低开销和快速检测是相反的目标。
听起来你试图解决TCP half-open connection issue (RFC 793 meaning)问题。如果是这样,如果你不知道“半开放”一词,研究TCP“半开放”可能会指向一些有用的信息,如:
http://www.codeproject.com/Articles/37490/Detection-of-Half-Open-Dropped-TCP-IP-Socket-Conne.aspx
答案 1 :(得分:1)
我认为这里没有通用的“正确”答案,这实际上取决于您的需求。您需要平衡带宽要求和服务认为客户端仍然存在的成本。这些需求因应用而异。对于IM,您可能想在几秒钟内知道,但对于文件传输应用程序,几分钟可能是可以接受的。