这可能是一个愚蠢的问题,但我想知道是否有办法强制socket.io定期重试使用websocket作为传输而不是轮询?
我注意到有时我的应用程序无法建立websocket连接(Handshake failed:ERR_CONNECTION_RESET)。 Socket.io然后正确地回退到轮询,但它似乎永远不会尝试再次切换回websockets,即使它可以工作。我的观察是否正确? 如果是这样,你会建议什么?
如果您需要任何代码,请与我们联系。我无法真正想到相关的代码示例,因为这更像是一个理论问题。
答案 0 :(得分:0)
Socket.io正确地回退到轮询,但它似乎永远不会尝试再次切换回websockets,即使它可以工作。我的观察是否正确?
是的,没错。
如果是这样,你会建议什么?
我不认为它是一个lib的工作,试图重新建立连接。您可以设置自己的侦听器,检查服务器可用性 - 有时服务器崩溃,用户不会注意到他们不再有连接......
有点客户方面的例子,希望它有助于挖掘。
//If sockets close
window.ws.onclose = function (e) {
ws.onclose = null;
ws.onerror = null;
ws.onopen = null;
// restart sockets in: 3000 ms
setTimeout(function () { ctx.createWS(); }, 3000);
};
window.ws.onerror = function (error) {
//On error we will try to restart sockets in function described before
ws.close();
};