2014-01-06 60 views
2

使用ExpressJS和Socket.IO我有一个HTML场景,多个用户可以连接到NodeJS。我即将做一些必须同步到所有客户端的动画。在客户端,我知道动画可以通过setInterval()(而不是时间理想)然后socket.emit()到NodeJS来实现。但是NodeJS中是否有一个Idle循环可用于主控动画和io.sockets.emit()来更新每个人的每个人?NodeJS空闲循环在哪里?

编辑:我想在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); 
    // ... 
}); 
+1

请说明你想达到的目标。对于动画,我建议看看'requestAnimationFrame' https://developer.mozilla.org/en/docs/Web/API/window.requestAnimationFrame – thomaux

+0

节点也有setInterval以及.. – AJcodez

+0

@AJcodez我需要一个空闲循环,以便处理数据尽可能快。 – Jake

回答

2

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

  1. process.nextTick:执行回调当前事件队列中的下一个事件循环的开始即结束之后。它不允许I/O执行,直到maxTickDepthnextTick调用被执行。如果使用得太多,可能会阻止I/O的发生。

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

给定你想要的setImmediate更适合你的需求。

0

退房的计时器文档:http://nodejs.org/api/timers.html

所有的定时器功能是全局。

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

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

对于同步的客户端动画,它可能有意义以较慢的速度执行块中的序列,而不是试图将许多websocket发射挤入动画持续时间。根据我的经验,人眼比websockets慢得多。

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

(这一切都无视你的使用情况,当然!)

+0

感谢您的回复。我现在只是在探索NodeJS,所以我不想特别做任何事情。缓和的例子刚刚完成。从目前为止的评论来看,似乎没有传统的空闲循环呢? – Jake

+0

据我所知,空闲循环用于后台任务。使用事件驱动的体系结构,基本上所有事情都可以在后台进行。回答不是基于真实用例的问题总是很困难:) – AJcodez