Socket.io需要很长时间才能连接

我正在编写一个node.js socket.io websockets应用程序(socket.io版本1.3.7),大约75%的时间客户端需要很长时间才能连接到服务器 – 另外25%的时间它几乎立即连接。 我已经在服务器和客户端上启用了debugging,并且在同一地点的两个地方挂起:

服务器日志 服务器日志

客户端日志(Chrome) 客户端日志

最终它会连接起来,我可以通过将默认的超时时间从20秒缩短到5秒来更快地连接,但是我不确定它为什么挂在第一位。 看着“Chrome浏览器”networking标签,看起来像是在尝试连接时会立即工作,或者在连接尝试的其余部分无法工作。 所以把超时时间降到5秒就意味着它会更快地尝试更多的尝试,其中一个最终会成功。

networking日志(Chrome) 网络日志

在这种情况下,需要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可以提供帮助,但似乎并不是一个永久的解决scheme – 有什么我做错了吗?

我们正在面对与套接字IO SDK类似的问题。 看来SDK实际上正在等待确认(util正在接收带有SID的消息)来启动消息传递。 但是在典型的WS / WSS通信中,我们可以在连接之后立即开始消息传递。 我们正在尝试调整SDK,以便在连接build立后立即启动消息传递。 如果有人find更好的方法,请分享。