【问题标题】:Good timeout for heartbeating proto using TCP - Java Sockets使用 TCP 的心跳原型的良好超时 - Java Sockets
【发布时间】:2010-09-23 17:36:36
【问题描述】:

我正在用 Java 实现我自己的原型,它将通过 TCP 连接使用心跳,我也用它来传输消息和文件。 对于客户端,我使用阻塞套接字 I/O。 所以这就是我计划的工作方式...... 我将套接字超时设置为 K 秒,并使心跳保持在间隔 T 内发送消息,使得 T

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

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

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

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

【问题讨论】:

  • 如果是小数据,为什么还要担心带宽?

标签: java sockets tcp timeout heartbeat


【解决方案1】:

“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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-18
      • 2011-05-28
      • 2015-11-12
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多