首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >极限NodeJS setImmediate

极限NodeJS setImmediate
EN

Stack Overflow用户
提问于 2013-09-10 10:56:38
回答 2查看 1.1K关注 0票数 1

我正在尝试在我的NodeJS环境中有一个循环,它每秒执行30次(基于一个固定的变量)。据我所知,setIntervalsetTimeout在NodeJS方面并不适合,因为process.nextTicksetImmediate可以满足NodeJS中的I/O队列的要求。我尝试使用以下代码(setImmediate):

代码语言:javascript
复制
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,我想知道是否有任何方法将其限制在这个数字,或替代循环结构。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-10 11:14:57

我被告知setInterval和setTimeout并不是NodeJS的出路

当然,当您需要超时或间隔时,它们就会出现!

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

如果setInterval不够精确或漂移,那么使用自调整计时器

票数 2
EN

Stack Overflow用户

发布于 2014-05-16 21:32:55

您应该继续使用setIntervalsetTimeout方法,但是要确保取消它们,这样它们就不会阻止否则会退出的进程,除非该定时器是程序的主要执行部分。

请参阅:节点定时器API文档

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18717064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档