在多个socket.io服务器(ALB平衡)的情况下,客户端与两个节点建立连接和断开连接,从而产生传输错误'。理想情况下,它应连接到一个节点并保持与该节点的连接。在ALB中的一个节点的情况下,连接保持持久。任何帮助?
答案 0 :(得分:0)
默认情况下,当socket.io首次启动时,它会以http轮询模式启动。在几个连续的http请求之后,以及对两端功能的OK检查之后,它将切换到webSocket模式。这样做是为了首先建立工作连接,然后确定两端是否支持webSockets,如果是,则切换到使用webSocket。如果你有一个非粘性的负载均衡器,那么你可能确实遇到了最后几个在不同服务器上结束的http轮询请求的问题,这可能会破坏socket.io的工作方式,因为单个服务器会丢失一些连接。启动顺序。
您可以将负载均衡器配置为粘性,以便它们始终将同一客户端发送到同一服务器,或者您可以告诉socket.io您只希望它以webSocket模式连接。
要将socket.io配置为仅使用webSocket而不进行轮询(因此只需一个连接),您可以在客户端中设置配置选项,如下所示:
Socket.io 1.x: use WebSockets only?
请记住,socket.io具有自动连接逻辑,因此如果在建立与服务器的socket.io连接后很长时间,连接因某种原因停止工作,客户端将丢弃当前连接并尝试做一个新的。如果您仍然使用非粘性负载均衡器,那么该重新连接可能最终会在另一台服务器上运行。取决于您在服务器上执行的操作可能是也可能不是问题。粘性负载平衡将确保重新连接最终在同一台服务器上。
答案 1 :(得分:0)
使用io.socket的 0.8.3 版本删除新版本1.0.0
compile('io.socket:socket.io-client:0.8.3') {
exclude group: 'org.json', module: 'json'
}
这对我有用
答案 2 :(得分:-1)
删除旧版本后,使用以下版本的io.socket: https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js
对我有用!