Socket.io 无法正常工作

Posted

技术标签:

【中文标题】Socket.io 无法正常工作【英文标题】:Socket.io doesn't work properly 【发布时间】:2012-12-03 14:17:34 【问题描述】:

我制作了一个实时图表,显示每秒的系统负载。它在我的本地机器上运行良好,但是在我将它部署到服务器后,在数据从服务器发回之前有很长的延迟。另外,我除了每秒发送一次数据外,它以不规则的间隔发送数据。

io.sockets.on('connection',function (socket) 
    var sysinfo = setInterval(function()
        socket.emit('system_info',
            time:Date.now(),
            load:os.loadavg(),
            memory:os.totalmem()-os.freemem()
        );
    ,3000);

    socket.on('disconnect',function()
        clearInterval(sysinfo);
    );
);

Here is the chart

Here is the source code

【问题讨论】:

真正的问题是什么? 数据到达前有很长的延迟,并且数据以不规则的间隔发回。 如果您检查网络流量,部署时是否仍与 Websocket 连接?也许它正在回退到服务器的另一种传输方式,但在本地系统上使用 Websockets。 @loganfsmyth 经过检查,我确实发现它正在退回到 xhr 轮询,但我仍然不明白。是服务器的问题还是我的问题? @user1823713 这可能解释了当时的缓慢。您使用的是什么托管服务?他们支持 websocket 吗? 【参考方案1】:

好吧,您已将其描述为“每秒”,但您的时间间隔设置为 3000 或“3。”

对于“不规则间隔”,不保证间隔是准确的。

来自Globals:

请注意,实际间隔可能会有所不同,具体取决于操作系统计时器粒度和系统负载等外部因素。它永远不会少于ms,但它可能会更长。

来自Timers:

请务必注意,您的回调可能不会在 delay 毫秒内准确调用 - Node.js 不保证回调触发的确切时间,也不保证触发的顺序。回调将在尽可能接近指定的时间被调用。

【讨论】:

很抱歉,我描述错误,但有时我需要等待几分钟才能看到数据返回。

以上是关于Socket.io 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

无法获取 socket.io.js

Socket.io 客户端无法与 websocket 服务器一起使用

Angular 6 和 Socket.IO - Socket.On 不工作

无法从Win Forms C#app连接到远程Node.js Socket.IO服务器

Socket.io 通过 id 断开客户端

如何使 socket.io 在 pm2 集群模式下正常工作?