默认情况下,当socket.io首次启动时,它将以http轮询模式启动 . 在几个连续的http请求之后,以及对两端功能的OK检查之后,它将切换到webSocket模式 . 这样做是为了首先 Build 工作连接,然后确定两端是否支持webSockets,如果是,则切换到使用webSocket . 如果你有一个非粘性的负载均衡器,那么你可能确实遇到了最后几个在不同服务器上结束的http轮询请求的问题,这可能会破坏socket.io的工作方式,因为单个服务器会丢失一些连接 . 启动顺序 .
您可以将负载均衡器配置为粘性,以便它们始终将同一客户端发送到同一服务器,或者您可以告诉socket.io您只希望它以webSocket模式连接 .
要将socket.io配置为仅使用webSocket而不进行轮询(因此只需一个连接),您可以在客户端中设置配置选项,如下所示:
请记住,socket.io具有自动连接逻辑,因此如果在 Build 与服务器的socket.io连接后很长时间,连接因某种原因停止工作,客户端将丢弃当前连接并尝试创建新连接一 . 如果您仍在使用非粘性负载 balancer 器,则该重新连接可能最终在另一台服务器上 . 取决于您在服务器上执行的操作可能是也可能不是问题 . 粘性负载 balancer 将确保重新连接最终在同一服务器上 .