心跳方向和确认



我们有一个带有使用TCP/IP的自定义协议的Java客户机服务器应用程序。由于套接字连接失效,我们发现有必要在协议中使用心跳。

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

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

1 -什么方向是最好的心跳,我认为我们选择"客户端到服务器",因为它需要服务器的负载。我想把它改为"服务器到客户端",但是我们控制了客户端和服务器代码,所以我们不需要担心浪费客户端的时间。

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

多谢

我认为任何方向的流量都应该足以让它保持活力,但用"pong"来回应"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);
}

相关内容

  • 没有找到相关文章

最新更新