NodeJS空闲循环在哪里?

时间:2014-01-06 07:48:55

标签: node.js socket.io

使用ExpressJS和Socket.IO我有一个HTML场景,多个用户可以连接到NodeJS。我即将做一些必须同步到所有客户端的动画。

在客户端,我知道动画可以通过setInterval()(非时间理想)然后socket.emit()到NodeJS来实现。但NodeJS中是否有一个可用于控制主动画的空闲循环和io.sockets.emit()来更新每个人的每个人?

编辑:我想在node.js中执行值的一般“动画”,例如伪代码:

process.idle(function() {

     // ...
     itempos.x += (itempos.dest - itempos.x) / 20; // easing
     itempos.y += (itempos.dest - itempos.y) / 20; // easing

     io.sockets.broadcast('update', itempos);
     // ...
});

2 个答案:

答案 0 :(得分:3)

作为服务器端框架,它很少会空闲(CPU或I / O)。除了idleloop更适合DOM要求。但是在node.js中你有以下功能:

  1. process.nextTick:在当前事件队列完成后执行回调,即在下一个事件循环开始时执行回调。在执行maxTickDepth nextTick调用之前,它不允许执行I / O.如果使用太多,可能会阻止I / O发生。

  2. setImmediate:在当前事件循环中的I / O回调完成后执行回调。允许I / O在多个setImmediate次呼叫之间发生。

  3. 根据您的需要setImmediate更适合您的需求。

答案 1 :(得分:0)

查看定时器文档:http://nodejs.org/api/timers.html

  

所有定时器函数都是全局变量。

     

setInterval(callback, delay, [arg], [...])

     

安排每延迟毫秒重复执行回调。返回可与clearInterval()一起使用的intervalId。您也可以选择将参数传递给回调。

对于同步客户端动画,以比尝试将尽可能多的websocket排放量插入动画持续时间更慢的速率进行块序列化是有意义的。在我的经验中,人的眼睛比腹部慢得多。

有大量的客户端框架可以为您缓解,而不是服务器问题。

(当然,所有这些都忘记了你的用例!)