心跳方向和确认

时间:2011-08-11 22:20:17

标签: direction ack heartbeat

我们有一个Java客户端服务器应用程序,其中包含使用TCP / IP的自定义协议。我们发现由于死套接字连接问题,有必要在协议中使用心跳。

我们从一开始就从客户端到服务器进行了心跳,服务器响应确认。

我们最近遇到了客户端超时问题,在分析完代码后,我提出了一些我不确定的问题。

1 - 心跳的最佳方向,我认为我们选择“客户端到服务器”,因为它占用了服务器的负载。 我正在考虑将其更改为“服务器到客户端”,但是我们可以控制客户端和服务器代码,因此我们不必担心浪费客户的时间。

2 - 是否有必要确认心跳以证明两个方向的连接是否存在?

非常感谢

1 个答案:

答案 0 :(得分:0)

我认为任何一个方向的任何交通都应该足以让它保持活力,但用“乒乓”“ping”回应并没有什么坏处。传统上,客户端发送心跳,服务器将负责关闭无响应的客户端,以便您听起来正确。

您是否尝试将超时设置为零?可能是干扰套接字连接超时的网络设备吗?

try {
  ServerSocket server = new ServerSocket(2048);
  server.setSoTimeout(0); // never time out
  try {
    Socket s = server.accept(  );
    // handle the connection
    // ...
  }
  catch (InterruptedIOException e) {
    System.err.println("No connection within 30 seconds");
  }
  finally {
    server.close(  );
  }
catch (IOException e) {
  System.err.println("Unexpected IOException: " + e);
}