Хороший тайм-аут для сердцебиения прото с использованием TCP - сокетов Java - PullRequest
1 голос
/ 23 сентября 2010

Я реализую свой собственный протокол на Java, он будет использовать биение через TCP-соединение, которое я также использую для передачи сообщений и файлов.Для клиента я использую блокирующий сокет ввода / вывода.Итак, вот как я планирую, что это будет работать ... Я установлю тайм-аут сокета на K секунд и заставлю сердцебиение продолжать посылать сообщения в интервале T, так что T

Сердцебиение - это сервер, отправляющий строку, а клиент отвечает на другую.

Я не хочу тратить большую пропускную способность, но с большим временем ожиданияСервер может ошибиться в отношении статуса клиента.

Что такое хороший интервал K?Я думаю о 40 секундах

PS: строки представляют собой 8 писем, отправленных в ISO-8859-1, поэтому его небольшие данные

Ответы [ 2 ]

3 голосов
/ 23 сентября 2010

«K» сильно зависит от конкретного профиля трафика приложения (например, как часто передаются данные приложения) и допуска приложения к потере соединения (например, как быстро приемник должен обнаружить потерю соединения).К сожалению, низкие издержки и быстрое обнаружение являются противоположными целями.

Похоже, вы пытаетесь решить проблему полуоткрытого соединения TCP (значение RFC 793) .Если это так и если вы не знали о термине «полуоткрытый», исследование TCP «полуоткрытый» может указать вам на полезную информацию, такую ​​как:

http://www.codeproject.com/Articles/37490/Detection-of-Half-Open-Dropped-TCP-IP-Socket-Conne.aspx

1 голос
/ 23 сентября 2010

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

...