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
канал первый раз быстро после рукопожатия.