Сервер Bayeux зависает при запросе на подключение

это беспокоит меня почти два дня.

Я пишу клиент Bayeux. Я использую WebSocket-client библиотека из Jetty и подключение к серверу Faye.

Я открываю WS-соединение с сервером (все локальное) с запросом рукопожатия:

{"channel":"/meta/handshake","supportedConnectionTypes":["long-polling","callback-polling","websocket"],"version":"1.0"}

Клиент немедленно получает ответ на рукопожатие:

{"channel":"/meta/handshake","successful":true,"version":"1.0","supportedConnectionTypes":["long-polling","cross-origin-long-polling","callback-polling","websocket","eventsource","in-process"],"clientId":"l8xhgf0t5gikcukcknhr5npfx11s5w9","advice":{"reconnect":"retry","interval":0,"timeout":45000}}

Затем клиент отправляет запрос на подключение:

{"clientId":"l8xhgf0t5gikcukcknhr5npfx11s5w9","connectionType":"websocket","channel":"/meta/connect"}

Затем сервер зависает на 45 секунд (значение времени ожидания), а затем отправляет этот ответ:

{"clientId":"l8xhgf0t5gikcukcknhr5npfx11s5w9","channel":"/meta/connect","successful":true,"advice":{"reconnect":"retry","interval":0,"timeout":45000}}

последнее сообщение журнала на сервере Faye перед зависанием: Ping "l8xhgf0t5gikcukcknhr5npfx11s5w9", 45

Но я никогда не получаю кадр Ping на стороне клиента. Я понятия не имею, почему сервер зависает на эти 45 секунд, но мне нужно решить эту проблему. Кто-нибудь из вас видел это раньше? Любая помощь/предложения/подсказки высоко ценится :)


person Tomas Zaoral    schedule 23.02.2015    source источник


Ответы (1)


Поведение, которое вы испытываете, — это именно то, что должен делать сервер Байё.

Сервер не "зависает"; он удерживает запрос в режиме длинного опроса.

Я мало знаю Фэй, кроме проекта CometD, который определил спецификация протокола Байе реализует сервер таким же образом, где запрос сообщения /meta/connect удерживается для значения времени ожидания.

person sbordet    schedule 23.02.2015
comment
Большое спасибо! Я был сбит с толку, потому что выбрал транспорт как веб-сокет, поэтому я ожидал, что сообщение будет возвращено немедленно. В следующий раз мне нужно более внимательно читать спецификации. - person Tomas Zaoral; 25.02.2015
comment
@TomasZaoral, как руководитель проекта CometD, мне будет интересно, на каком языке/платформе вы пишете клиент Bayeux. В проекте CometD есть Java и JavaScript, но не уверен в проекте Faye. - person sbordet; 25.02.2015