2

出于某种原因,每次新套接字连接到服务器时,我的 emitDraw 函数都会在绘制过程中停止(process.nextTick() 调用周期意外中断)。无论如何,在接受新连接的同时保持我的 emitDraw 函数运行?

io.sockets.on('connection', function(socket) {
    socket.on('drawing', function() {  
      //some code
      emitDraw(socket);
    });
});

function emitDraw(socket) {
    //some code
    process.nextTick(function(){emitDraw(socket)});
};

谢谢

4

1 回答 1

0

process.nextTick() 仅有助于将代码从当前执行堆栈推到下一个堆栈的顶部。因此,允许在这两个堆栈执行之间触发的事件的回调在下一个堆栈中执行。

在当前情况下,正常的执行堆栈只有 emitDraw() 执行,并且对 process.nextTick() 的调用允许事件(特别是套接字连接)在下一个堆栈中触发和执行。一旦套接字连接被触发,堆栈就会执行两组代码,与 socket.on(connection) 和 emitDraw() 关联的回调。

如果 emitDraw() 变为无响应,仅意味着它无法在当前堆栈上共同执行而不会降低性能。

由于 Node.js 主进程在单个线程上运行,因此您无法期望通过将其保持在同一个线程中来获得更好的性能,除非增加处理能力。或者,您可以将 emitDraw() 分叉到子进程,以便它可以独立于主进程执行。

于 2012-06-06T07:08:01.893 回答