CometD - как установить соединение с длительным опросом

Просто чтобы убедиться, что я делаю это правильно. Я кодирую клиент Bayeux для взаимодействия с внешним сервером CometD (посредством длительного опроса). Мой клиент отправляет запросы в следующем порядке: рукопожатие, подключение, подписка, подключение. Последнее соединение останавливается до тех пор, пока сообщение не станет доступным. Когда приходит сообщение, сервер отвечает. Все работает. Я делаю это правильно?


person Łukasz    schedule 23.06.2016    source источник
comment
На каком языке этот клиент? CometD уже поддерживает JavaScript и Java.   -  person sbordet    schedule 23.06.2016
comment
Java-клиент. CometD на самом деле поддерживает java и поставляется с клиентскими библиотеками, которые, к сожалению, являются java 6.   -  person Łukasz    schedule 23.06.2016
comment
Java-клиент CometD — это Java 7. Вам не нужно его переписывать, просто используйте CometD.   -  person sbordet    schedule 23.06.2016
comment
Виноват. Наша кодовая база, к сожалению, java 6.   -  person Łukasz    schedule 24.06.2016
comment
CometD 2.x совместим с JDK 5. Вы хотите использовать это, а не переписывать свой собственный клиент Bayeux.   -  person sbordet    schedule 24.06.2016
comment
Это не совсем отвечает на мой вопрос, так как решение о реализации собственного клиента уже принято. Кроме того, вы также предположили, что альтернативой является написание клиента Bayeux с нуля - stackoverflow.com/questions/37182217/. Знаете ли вы, правильный ли мой подход, описанный в начальном вопросе?   -  person Łukasz    schedule 28.06.2016


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

person sbordet    schedule 28.06.2016