如果有多个socket.io服务器(ALB平衡),则客户端会与两个节点建立连接并断开连接,从而导致"传输错误"。 理想情况下,它应连接到一个节点并保持连接到该节点。 如果ALB中只有一个节点,则连接保持持久。 有帮助吗?
使用0.8.3版本的io.socket删除新版本1.0.0
compile('io.socket:socket.io-client:0.8.3') {
exclude group: 'org.json', module: 'json'
}
这对我有用
默认情况下,当socket.io首次启动时,它将以http轮询模式启动。经过几个连续的http请求,并且在两端都可以正常检查功能之后,它将切换到webSocket模式。这样做是为了首先建立有效的连接,然后确定两端是否都支持webSocket,如果可以,则切换到使用webSocket。如果您有一个非粘性的负载均衡器,那么前几个HTTP轮询请求最终会出现在不同的服务器上,则可能确实会出现问题,这可能会破坏socket.io的工作方式,因为单个服务器会丢失某些连接。启动顺序。
您可以将负载均衡器配置为粘性,以便它们始终将同一客户端发送到同一服务器,也可以告诉socket.io您只希望它以webSocket模式连接。
要将socket.io配置为仅使用webSocket而不进行轮询(仅使用一个连接),可以在客户端中设置一个配置选项,如下所示:
Socket.io 1.x:仅使用WebSockets?
请记住,socket.io具有自动连接逻辑,因此,如果在建立与服务器的socket.io连接后很长时间,该连接由于某种原因停止工作,则客户端将删除当前连接并尝试建立新连接一。如果您仍在使用非粘性负载均衡器,则重新连接可能会在其他服务器上结束。根据您在服务器上执行的操作,可能会或可能不会出现问题。粘性负载平衡将确保重新连接最终在同一服务器上。
将传输直接用作网络套接字而不是轮询来使用连接的任何缺点?
@VikasGoyal-如果您在不支持webSockets的浏览器中运行,则将无法建立连接。 通常,socket.io将通过使用http轮询代替缺少的webSocket来处理该情况。
删除旧版本后,使用以下版本的io.socket:
https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js
这个对我有用!