Нужно ли сердцебиение, чтобы сохранить соединение TCP открытым? - PullRequest
89 голосов
/ 15 мая 2009

У меня есть два компонента, которые взаимодействуют через TCP / IP. Компонент A действует как сервер / слушатель, а компонент B является клиентом. Они должны общаться как можно быстрее. В любой момент времени может быть только одно соединение (хотя это не относится к этому вопросу). Старший разработчик в моей компании сказал, что мне нужно использовать тактовые импульсы на уровне приложений между двумя компонентами, чтобы соединение оставалось открытым.

Я думал, что соединение с TCP / IP остается открытым, но я читал несколько блогов / сайтов, в которых говорилось, что общение между этими приложениями является довольно стандартной практикой.

Я знаю, что одна из причин, по которой компонент В сердечных сокращений компонента В, заключается в том, что он может сообщить в службу поддержки, если есть проблемы со связью с компонентом В (либо связь не работает, либо компонент В не работает). Нужны ли сердцебиения по какой-либо другой причине? Например, чтобы убедиться, что в трубе часто что-то есть, чтобы держать ее открытой?

Компонент A в настоящее время пульсирует компонент B каждые 20 секунд и закрывает соединение, если ничего не получено от компонента B в течение 120 секунд. Затем он возобновляет прослушивание соединений в предположении, что компонент B будет периодически пытаться восстановить соединение, если связь разорвана. Это успешно работает.

Повторю мой вопрос: нужны ли пульсы для поддержания соединения TCP / IP?

Ответы [ 15 ]

1 голос
/ 15 мая 2009

Пульс не требуется для протоколов TCP. Его реализация заключается в том, чтобы определить, не завершил ли соединение другое соединение нестандартным способом (т. Е. Не прошел процесс разрыва).

1 голос
/ 15 мая 2009

Я бы сказал, что если у вас нет пульса, не имеет значения, открыто ли ваше соединение TCP / IP или нет.

1 голос
/ 15 мая 2009

То, что вы называете сердцебиением, полезно при попытке установить время ожидания. Ваша розетка может казаться открытой, но человек на другом конце может страдать от BSOD. Один из самых простых способов обнаружить неработающие клиенты / серверы - установить таймаут и следить за тем, чтобы сообщения приходили так часто.

Некоторые люди называют их NOOPs (No Ops).

Но нет, они не нужны для поддержания связи, полезно только знать, каков статус.

0 голосов
/ 15 мая 2009

Многие протоколы реализуют пульс или состояние здоровья, как сказал Ллойд. Просто, чтобы вы знали, что соединение все еще открыто, и если вы что-то пропустили

0 голосов
/ 15 мая 2009

Соединение останется открытым - нет необходимости реализовывать пульс, и большинство приложений, использующих сокеты, этого не делают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...