Направление и подтверждение сердцебиения - PullRequest
1 голос
/ 12 августа 2011

У нас есть клиент-серверное приложение Java с настраиваемым протоколом, использующим TCP / IP.Мы сочли необходимым использовать биение в протоколе из-за проблем с подключением к мертвой розетке.

У нас было биение с самого начала при переходе от клиента к серверу, когда сервер отвечал с подтверждением.

У нас недавно были проблемы с тайм-аутом с клиентами, и после анализа кода возникла пара вопросов, в которых я не уверен.

1 - Какое направление лучше всего для сердцебиенияЯ думаю, что мы выбрали «клиент-сервер», так как он принимает нагрузку на сервер.Я думал о том, чтобы сменить его на «сервер-клиент», однако у нас есть контроль над клиентским и серверным кодом, поэтому нам не нужно слишком беспокоиться о том, чтобы тратить время на клиентов.

2 - необходимо липодтвердить сердцебиение, чтобы доказать, что соединение живо в обоих направлениях?

Большое спасибо

1 Ответ

0 голосов
/ 12 августа 2011

Я думаю, что любой трафик в любом направлении должен быть достаточным, чтобы поддерживать его, но не мешает отвечать «пингом» с «понгом».Традиционно клиент отправляет сердцебиение, а сервер будет отвечать за отключение не отвечающих клиентов, так что у вас правильно звучит.

Вы пытались установить время ожидания равным нулю?Это могут быть сетевые устройства, которые влияют на время ожидания вашего сокета?

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...