我正在尝试在NodeJS环境中执行一个循环,该循环每秒执行30次(基于固定变量)。有人告诉我,就NodeJS而言,setIntervalsetTimeout并非可行之路,因为process.nextTicksetImmediate可用于符合NodeJS中的I / O队列。我尝试使用以下代码(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,并且我想知道是否有任何方法可以将其限制为该数量或其他循环结构。谢谢

最佳答案

有人告诉我,就NodeJS而言,setInterval和setTimeout并非可行之路


当然是在您需要超时或间隔的时候!

setImmediate / nextTick是即时的,这不是您想要的。您不能限制它们,它们在设计上尽可能快。

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

10-06 00:27