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 客户端无法与 websocket 服务器一起使用
Angular 6 和 Socket.IO - Socket.On 不工作