socket.io客户端连接重复断开连接

问题描述:

如果多个socket.io服务器(ALB平衡)客户端正在连接并断开两个节点的连接,导致'传输错误'。理想情况下,它应该连接到一个节点并保持连接到该节点。在ALB中有一个节点的情况下,连接保持持久性。任何帮助?socket.io客户端连接重复断开连接

默认情况下,当socket.io第一次启动时,它将以http轮询模式启动。经过几次连续的http请求,并在两端的能力检查完成后,它将切换到webSocket模式。这是为了首先建立一个工作连接,然后确定两端是否支持webSocket,如果是,则切换到使用webSocket。如果你有一个非粘性负载平衡器,那么你确实可能会遇到前几个http轮询请求的问题,这些请求会在不同的服务器上结束,这可能会破坏socket.io的工作方式,因为单个服务器会丢失一些连接启动顺序。

您可以将您的负载均衡器配置为粘性,以便他们始终将同一个客户端发送到同一台服务器,或者您可以告诉socket.io您只希望它以webSocket模式连接。

配置socket.io仅使用一个网页套接字和无轮询(所以只有一个连接),你可以在这里看到设置在客户端的配置选项:

Socket.io 1.x: use WebSockets only?

请记住, socket.io具有自动连接逻辑,因此如果在建立到服务器的socket.io连接后很长一段时间,连接因某种原因停止工作,客户端将丢弃当前连接并尝试创建一个新连接。如果您仍在使用非粘性负载平衡器,则该重新连接可能会在不同的服务器上结束。取决于你在服务器上做什么,可能会或可能不成问题。粘性负载平衡将确保重新连接在同一台服务器上结束。

+0

使用连接直接使用传输作为websocket而不是轮询的任何缺点? –

+0

@VikasGoyal - 如果您在不支持webSockets的浏览器中运行,那么您将无法获得连接。 socket.io通常会通过用http轮询代替丢失的webSocket来处理这种情况。 – jfriend00