我正在编写node.js socket.io websockets应用程序(socket.io的1.3.7版本),大约75%的时间客户端需要很长时间才能连接到服务器 - 另一个25%的时间它几乎立即连接。我已经在服务器和客户端上启用了调试,它在同一地点的两个地方都挂起:
最终它会连接,并且我已经能够通过将超时从默认的20秒减少到大约5秒来加快连接速度,但我不确定它为什么会这样做挂在第一位。观看Chrome网络标签,似乎在进行连接尝试时,它将立即起作用,或者在其余的连接尝试中无法工作。因此,将超时时间降低到5秒意味着它会更快地尝试更多,其中一个最终会成功。
在这种情况下,需要进行5次连接尝试,大约20秒才能连接。
客户代码
// client.wsPath is typically http://127.0.0.1:8080/abc, where abc is the namespace to connect to.
client.socket = io.connect(client.wsPath, {timeout: 5000, transports: ["websocket"]});
服务器代码
var express = require("express");
var io = require("socket.io");
var htmlApp = express();
var htmlServer = http.Server(htmlApp);
htmlServer.listen(DISPATCH_SERVER_LISTEN_PORT, function()
{
log.info("HTML Server is listening on port " + DISPATCH_SERVER_LISTEN_PORT);
});
var wsServer = io(htmlServer, {transports: ["websocket"]});
var nsp = wsServer.of("/" + namespace);
nsp.on("connection", function(socket)
{
log.info("connect");
};
我们发现清除浏览器Cookie可能会有所帮助,但似乎不是一个永久的解决方案 - 是否存在我做错的事情?
答案 0 :(得分:0)
我们面临与socket IO SDK类似的问题。似乎SDK实际上正在等待确认(util接收带有SID的消息)以启动消息传递。但在典型的WS / WSS通信中,我们可以在连接后立即开始发送消息。我们正在尝试调整SDK,使其能够在建立连接后立即开始发送消息。如果有人找到更好的方法,请分享。