CometD - как установить длительное соединение

Просто чтобы убедиться, что я делаю это правильно. Я кодирую клиента Bayeux для взаимодействия с внешним сервером 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 канал первый раз быстро после рукопожатия.

Другие вопросы по тегам