Node JS、Socket.io、Async和阻塞事件循环



我正在使用Caolan的NodeJS、Socket.io和Async模块开发一个应用程序。

我想问一些关于向许多客户端发射的问题,以及它是否会阻塞事件循环。

为了在我的应用程序中使用,我需要堆叠套接字(连接的客户端信息(,并管理我需要向谁发射。

因此,一旦我知道我需要向谁发送数据,我就会使用Async.each在客户端之间循环,将数据发送给客户端。

示例:

async.each(clientsIds,
function(item,cb)
{
clients[item].emit('sendData', datas);
cb();
},
function(err)
{
}
);  

所以我的问题是:如果我连接了1000000个客户端,当我发送数据时,它会阻止事件循环直到它完成向所有客户端发出

我独自连接,并试图向自己发出1000000次时,它会阻止事件循环,直到函数完成运行。是因为我将1000000发送给相同的客户端,还是如果是1000000个不同的连接客户端,结果会是一样的?

如果有人能帮助我,请提前感谢!我无法对大量连接的客户端进行测试,以自己确认与否。

(很抱歉,如果这是一个愚蠢的问题,我不是一个专业人士(

直接依赖于emit函数,是sync还是async?

异步库不会阻塞您的事件循环,它通过回调来处理事情,现在,所有1000000个回调都在队列中等待调用,现在,每当事件循环将函数一个接一个地取出到调用堆栈,并且emit函数在同一线程或唯一的事件循环中执行所有任务(一些繁重的操作(时,这会使其他999999个回调等待,但如果.eemit函数将任务卸载到不同的运行程序,例如db调用,let说mongodb,node-js驱动程序将执行io的任务卸载到mongodb服务器,并在不阻塞事件循环的情况下继续运行。基本上检查发射在做什么。如果它不会做太多,那么它肯定不会阻止你唯一的事件循环。

最新更新