Я использую длительный опрос HTTP для нажатия событий сервера клиенту.Поддерживает ли HTTP длительный опрос сообщение о сердцебиении?
На стороне клиента я посылаю длинный запрос опроса на сервер и блокирует его, ожидая события с сервера.
На стороне сервера мы использовали фреймворк cometd (я на стороне клиента, мало что знаю о стороне сервера).
Проблема в том, что когда-то соединение прерывается, и клиент не может обнаружить это, поэтому он блокирует его навсегда. Мы пытаемся реализовать какое-то сообщение о сердцебиении, которое будет отправлено каждые N минут, чтобы поддерживать соединение. Но это, похоже, не работает.
Мой вопрос: действительно ли длительный опрос HTTP поддерживает сообщения о сердцебиении? Насколько я понимаю, длительный опрос HTTP позволяет серверу отправлять одно событие и сразу же закрыть соединение. Клиент должен повторно подключиться и отправить новый запрос, чтобы получить следующее событие. Возможно ли, что сервер отправляет сообщения о сердцебиении каждые N минут, пока все еще держит соединение открытым до тех пор, пока не произойдет реальное событие сервера?
Спасибо за ваш ответ. К сожалению, клиент является встроенным устройством, он закодирован в исходных сокетах C++, мы не можем использовать CometD. Знаете ли вы, как CometD отправляет эти сообщения? Поскольку на основании вашего третьего абзаца длительный опрос по-прежнему один запрос соответствует одному из ответов, эти сообщения о сердцебиении не должны отправляться через это длинное соединение для опроса, иначе это один запрос на несколько ответов, это потоковая передача HTTP, а не HTTP длительный опрос. Открывает ли CometD еще одно соединение для сообщений с биением? Как настроить CometD для отправки этих сообщений? – Tiensbakung
Для передачи сообщений CometD использует протокол под названием [Bayeux] (http://docs.cometet.org/3/reference/#_bayeux), используя HTTP или WebSocket. Для каждого ответа HTTP длинного опроса CometD может отправлять многие сообщения Bayeux. Это не потоковая передача, это чистый длинный опрос. Если вы хотите использовать CometD (и я действительно имею в виду [этот проект] (http://cometd.org)) на сервере, с клиентом C++ (который CometD не предоставляет), тогда вам нужно реализовать протокол Bayeux C++ клиент. [Компания за CometD] (https://webtide.com) может [помочь вам] (http://docs.cometd.org/3/reference/#_support) об этом. – sbordet