Почему мой socket.io использует длительный опрос вместо websocket?

Итак, я настроил socket.io с сервером NodeJS + ExpressJS, и все работает хорошо. Единственная проблема заключается в том, что я понял, что мои вызовы emit() используют метод резервного копирования XHR для отправки события на мой сервер, а не через открытое веб-соединение.

Когда я просматриваю соединение, все, что я вижу, это некоторые 2probe, 3probe, а затем группа из 2 и 3 отправляется через websocket. Это соединение кажется открытым и работающим, поэтому почему он возвращается к длительному опросу с запросами XHR?

Я не предоставляю никакого кода прямо сейчас, потому что я не уверен, какая часть будет полезна, так как функциональный аспект кода работает отлично, я просто хочу использовать websocket поверх XHR. Дайте мне знать, есть ли какой-нибудь код, который вы хотели бы видеть.

UPDATE

Итак, я немного тестировал сокеты, и я добавил еще пару emit() вызовов. Похоже, что первые 1 или 2 эмиссии используют длительный опрос, а затем внезапно переходят к использованию websocket. Просто любопытно, что здесь происходит.

Ответ 1

Так как Socket.IO 1.x, резервный алгоритм изменился с подхода понижения до подхода к обновлению.

Длинный опрос работает повсюду, поэтому он используется сначала, чтобы сразу получить "соединение". Затем в фоновом режиме делается попытка обновить длинное соединение опроса с подключением к сети. Если обновление выполнено успешно, длительный опрос останавливается, и сеанс переключается на соединение с веб-разъемом. Если это не удастся, длинный опрос "соединение" остается открытым и продолжает использоваться.