По умолчанию клиент socket.io «тестирует» соединение с сервером с помощью пары http-запросов.Если у вас есть несколько запросов к серверу, и эти первоначальные запросы http не обращаются к одному и тому же серверу каждый раз, то соединение socket.io никогда не будет установлено должным образом и не переключится на webSocket, и оно будет пытаться использовать опрос http.
Есть два способа это исправить.
Вы можете настроить своих клиентов так, чтобы они просто предполагали, что протокол webSocket будет работать.Это будет инициировать соединение с одним и только одним http-соединением, которое затем будет немедленно обновлено до протокола webSocket (при этом поверх будет запущен socket.io).В socket.io это опция transport
, указанная при начальном подключении.
Вы можете настроить инфраструктуру сервера так, чтобы он зависал, чтобы запрос от данного клиента всегда возвращалсяна тот же сервер.Есть много способов сделать это в зависимости от архитектуры вашего сервера и от того, как выполняется балансировка нагрузки между вашими серверами.
Если ваши серверы поддерживают любое состояние клиента локально по отношению к серверу (ине в общей базе данных, к которой имеют доступ все серверы), тогда вам понадобится даже разорванное соединение и переподключение, чтобы вернуться на тот же сервер, и вам понадобятся липкие соединения как единственное решение.Вы можете прочитать больше о липких сессиях на сайте socket.io здесь .