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

标签 node.js socket.io

我正在编写一个node.js socket.io websockets应用程序(socket.io版本1.3.7),大约75%的时间客户端需要很长时间才能连接到服务器 - 其他25%它几乎立即连接。我已经在服务器和客户端上启用了调试,并且它卡在同一位置的两个位置:

服务器日志 Server log

客户端日志 (Chrome) Client log

最终它会连接,并且我已经能够通过将超时从默认的 20 秒减少到大约 5 秒来使其连接更快,但我不确定它为什么会挂起。观察 Chrome 网络选项卡,似乎在进行连接尝试时,它要么立即工作,要么在其余的连接尝试中不起作用。因此,将超时设置为 5 秒只是意味着它会更快地进行更多尝试,其中一次最终会成功。

网络日志 (Chrome) Network log

在本例中,需要 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 会有所帮助,但似乎不是一个永久的解决方案 - 是我做错了什么吗?

最佳答案

我们在套接字 IO SDK 方面也面临着类似的问题。看起来 SDK 实际上正在等待确认(util 正在接收带有 SID 的消息)以开始消息传递。但在典型的 WS/WSS 通信中,我们可以在连接后立即开始消息传递。我们正在尝试调整 SDK,使其能够在连接建立后立即开始消息传递。如果有人找到更好的方法,请分享。

关于node.js - Socket.io 需要很长时间才能连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34664132/

相关文章:

node.js - 将 Node.js 中 os.cpus() 的输出转换为百分比

javascript - 在 NPM 范围包中公开两个(或更多)Node.js Babel 类

node.js - 我可以使用 Tsung 加载测试 Socket.io 应用程序吗?

javascript - Socket.io 连接状态确认

node.js - socket.io 的含义是监听一个快速服务器?

node.js - 为什么部署到 Elastic Beanstalk 的 NodeJS 服务器在端口 80 上接收 HTTPS 流量?

node.js - 如何防止在 Express 的 REST api 调用中使用冲突的关键字

node.js - express.js 怎么显示图片?

java - 是否可以在服务器端的一个套接字中接收来自多个客户端的数据报包?

go - 如何在Go中获取socket.io握手查询