限制NodeJS setImmediate

时间:2013-09-10 10:56:39

标签: javascript node.js

我正在尝试在我的NodeJS环境中有一个循环,它将每秒执行30次(基于固定变量)。我被告知setIntervalsetTimeout不是NodeJS的方法,process.nextTicksetImmediate可用于遵守I / O队列在NodeJS中。我尝试使用以下代码(setImmediate):

var Physics = {
    lastTime: (new Date().getTime()),
    upsCounter: 0,
    ups: 0,

    init: function() {
        Physics.loop();
    },

    loop: function() {
        var currentTime = (new Date().getTime());
        Physics.upsCounter += 1;

        if((currentTime - Physics.lastTime) >= 1000) {
            Physics.ups = Physics.upsCounter;
            Physics.upsCounter = 0;
            Physics.lastTime = currentTime;

            console.log('UPS: ' + Physics.getUPS());
        }

        setImmediate(Physics.loop);
    },

    getUPS: function() {
        return this.ups;
    }

};

我的问题是每秒更新(UPS)超过400,000,而不是所需的30,我想知道是否有任何方法可以将其限制为此数字或替代循环结构。感谢

2 个答案:

答案 0 :(得分:2)

  

我被告知setInterval和setTimeout不是NodeJS的方法

当然,他们是你需要超时或间隔的时候!

setImmediate / nextTick 立即,这不是您想要的。你不能限制它们,它们尽可能快地通过设计。

如果setInterval不够准确或漂移,请使用self-adjusting timer

答案 1 :(得分:0)

您应该继续使用setIntervalsetTimeout方法,但请确保取消它们以便它们不会阻止原本会退出的进程,除非该计时器是主要执行对于该计划。

请参阅:Node Timers API Documentation

javascript var t = setInterval(myMethod, 100); t.unref(); //the timer t will not execute if the rest of the program is ready to exit.