![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Периодически на работе сталкиваемся с проблемами вида "TCP-соединение пропало неизвестно куда, клиент ждет ответа сервера, сервер ждет запроса клиента". Лечится это вроде бы модификацией настроек TCP keep-alive.
При этом протоколы с короткими действиями вида "отправили HTTP-запрос, получили ответ" с виду работают лучше чем протоколы с постоянно висящими TCP-коннектами (несмотря на то что, в HTTP вроде есть опция "использовать TCP-соединение повторно", тоже вроде называющаяся keep-alive, чтобы все запутались).
В связи с этим интересно - а вот как к подобной боли с TCP соединениями относятся протоколы типа AMQP или веб-сокетов, которые тоже вроде бы должны висеть постоянно подключенными, т.к. в них сервер дергает клиента событиями?
В amqp есть фреймы типа heartbeat, выполняющие функцию аналогичную keep-alive на уровне TCP протокола, т.е. мало нам параметров сокетов или реестра, еще нужно будет с интервалами посылки этих фреймов разбираться. А что в веб-сокетах?
При этом протоколы с короткими действиями вида "отправили HTTP-запрос, получили ответ" с виду работают лучше чем протоколы с постоянно висящими TCP-коннектами (несмотря на то что, в HTTP вроде есть опция "использовать TCP-соединение повторно", тоже вроде называющаяся keep-alive, чтобы все запутались).
В связи с этим интересно - а вот как к подобной боли с TCP соединениями относятся протоколы типа AMQP или веб-сокетов, которые тоже вроде бы должны висеть постоянно подключенными, т.к. в них сервер дергает клиента событиями?
В amqp есть фреймы типа heartbeat, выполняющие функцию аналогичную keep-alive на уровне TCP протокола, т.е. мало нам параметров сокетов или реестра, еще нужно будет с интервалами посылки этих фреймов разбираться. А что в веб-сокетах?
no subject
Date: 2014-05-13 04:45 pm (UTC)no subject
Date: 2014-05-13 05:10 pm (UTC)Вот у нас TCP соединение висит 4126718 секунд. За это время через него прошло 365411307 сообщений. Есть пинги (DWR) которые ходят приблизительно раз в 30 секунд. Это протокол DIAMETER
no subject
Date: 2014-05-13 05:35 pm (UTC)no subject
Date: 2014-05-13 05:42 pm (UTC)no subject
Date: 2014-05-13 06:13 pm (UTC)no subject
Date: 2014-05-13 06:27 pm (UTC)no subject
Date: 2014-05-13 07:15 pm (UTC)а так да, у них во многих реализациях (года три назад точно) были грабли в виде "данные уходят в никуда", когда клиент не знает что соединение давно закрыто и на той стороне никто не слушает
no subject
Date: 2014-05-13 08:37 pm (UTC)no subject
Date: 2014-05-13 09:15 pm (UTC)no subject
Date: 2014-05-14 08:42 am (UTC)Как диагностировать и что с этим делать для протоколов где нет подтверждений - пока не совсем ясно.
no subject
Date: 2014-05-14 10:44 am (UTC)Наличие хартбитов на уровне протокола ИМХО оправдано только для крайне хреновых каналов связи, в которых часто физически падает линк. Подобные вещи, действительно, крайне сложно отследить на уровне клиента. Более мелкие косяки лечатся ретрансмитами.
no subject
Date: 2014-05-14 10:45 am (UTC)no subject
Date: 2014-05-13 08:15 pm (UTC)no subject
Date: 2014-05-13 08:40 pm (UTC)no subject
Date: 2014-05-20 09:24 am (UTC)В чем проблема?
И да, почему именно TCP - а не более высокоуровневые ftp, smtp, http для передачи сообщений?