NodeJS:client.emit('message')连接后需要延时才能看到

我在Node应用程序中使用socket.io 。 这里是我的代码片段:

 io.sockets.on('connection', socket => { setTimeout(function () { console.log('a client connected!') clients.forEach(s => s.emit('to_client', 'a client connected')) }, 0) }) 

如果我删除了setTimeout包装器,在客户端(Chrome浏览器)的控制台中没有看到'a client connected' ,但即使超时为零,也会显示出来。 可能是什么问题? 我宁愿没有setTimeout因为它听起来不像这里应该要求的东西。

Node是一个asynchronous的单线程运行时,所以它使用callback来避免阻塞I / O。

使用setTimeout是一种方式(与用于处理asynchronous代码的process.nextTick()方法中的节点一起构build)。 你的示例代码试图访问clients ,我怀疑是否处理这个没有被初始化之前,你的连接callback已经执行。

setTimeout方法基本上将代码(callback函数)推送到事件队列中,因此 setTimeoutcallback可以运行之前,处理调用堆栈中的任何东西。