使用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);
// ...
});
答案 0 :(得分:3)
作为服务器端框架,它很少会空闲(CPU或I / O)。除了idleloop更适合DOM要求。但是在node.js中你有以下功能:
process.nextTick:在当前事件队列完成后执行回调,即在下一个事件循环开始时执行回调。在执行maxTickDepth
nextTick
调用之前,它不允许执行I / O.如果使用太多,可能会阻止I / O发生。
setImmediate:在当前事件循环中的I / O回调完成后执行回调。允许I / O在多个setImmediate
次呼叫之间发生。
根据您的需要setImmediate
更适合您的需求。
答案 1 :(得分:0)
查看定时器文档:http://nodejs.org/api/timers.html
所有定时器函数都是全局变量。
setInterval(callback, delay, [arg], [...])
安排每延迟毫秒重复执行回调。返回可与clearInterval()一起使用的intervalId。您也可以选择将参数传递给回调。
对于同步客户端动画,以比尝试将尽可能多的websocket排放量插入动画持续时间更慢的速率进行块序列化是有意义的。在我的经验中,人的眼睛比腹部慢得多。
有大量的客户端框架可以为您缓解,而不是服务器问题。
(当然,所有这些都忘记了你的用例!)