由于某种原因,每次新的套接字连接到服务器时,我的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)});
};
由于
答案 0 :(得分:0)
process.nextTick()仅帮助将当前执行堆栈的代码推送到下一个堆栈的顶部。因此,允许在下一个堆栈中执行在这两个堆栈执行之间触发的事件的回调。
在当前情况下,正常执行堆栈只执行emitDraw(),并且对process.nextTick()的调用允许在下一个堆栈中触发和执行事件(特别是套接字连接)。一旦套接字连接被触发,栈就有两组代码要执行,回调与socket.on(连接)和emitDraw()相关联。
如果emitDraw()没有响应,则只表示它无法在当前堆栈上共同执行而不会降低性能。
由于主Node.js进程在单个线程上运行,因此除了通过提高处理能力之外,通过将它保持在同一个线程中,您不能指望任何更好的性能。或者,您可以将emitDraw()分叉到子进程,以便它可以独立于主进程执行。