Просто чтобы убедиться, что я делаю это правильно. Я кодирую клиент Bayeux для взаимодействия с внешним сервером CometD (посредством длительного опроса). Мой клиент отправляет запросы в следующем порядке: рукопожатие, подключение, подписка, подключение. Последнее соединение останавливается до тех пор, пока сообщение не станет доступным. Когда приходит сообщение, сервер отвечает. Все работает. Я делаю это правильно?
CometD - как установить соединение с длительным опросом
Ответы (1)
Как правило, клиент должен следовать advice
, отправленному сервером в сообщениях /meta/handshake
и /meta/connect
.
Сообщения о подписке должны удерживаться клиентом до успешного /meta/handshake
ответа.
Отправка запросов в определенном порядке не совсем точна, поскольку вы хотели бы использовать как минимум два соединения.
Поэтому запрос /meta/handshake
идет первым; после успешного ответа /meta/handshake
/meta/subscribe
и /meta/connect
могут идти параллельно по двум соединениям.
Удерживается ли первый ответ /meta/connect
или нет, тогда не имеет значения: ваш клиент будет иметь механизм для обработки сообщений /meta/connect
и влиять на сервер относительно удержания ответа /meta/connect
.
В CometD первое /meta/connect
отправляется с advice: { timeout: 0 }
, потому что клиент хочет знать, жив ли сервер после рукопожатия (в противном случае первое соединение может быть «потеряно», и клиент может подумать, что он нормально подключен к серверу, когда это не так). Он также служит для уведомления клиентских приложений на канале /meta/connect
в первый раз сразу после рукопожатия.