【问题标题】:NodeJs setTimeout for each game or one setInterval that loop each game每个游戏的 NodeJs setTimeout 或循环每个游戏的一个 setInterval
【发布时间】:2021-08-29 22:54:36
【问题描述】:

我正在尝试为基于角色的浏览器游戏制作服务器,所以到目前为止我做了什么:

一旦有 2 个玩家加入服务器,就会创建一个房间,然后它会开始自己的超时,比如说 10 秒,一旦超时完成,它会更改其状态并重新运行超时。

我担心如果我有很多房间可能会影响性能,所以我想到了一个想法,即创建一个每秒滴答的 setInterval,并循环遍历所有房间以调用更新,在房间内一次update 调用,它会检查上次更新状态与当前时间,如果超过 10 秒,它会更新到新的开始。

恐怕每秒用setInterval可能会比第一个想法差,还是相反?

【问题讨论】:

    标签: node.js websocket socket.io real-time ws


    【解决方案1】:

    让每个房间都有自己的计时器比让一个频繁使用的setInterval() 必须循环遍历所有房间要高效得多。

    nodejs 中的计时器非常高效,可以轻松扩展到数以亿计的计时器。它们存储在排序的链表中,并且仅将链表的头部与事件循环中的当前时间进行比较。链表中的所有其余计时器都没有固定成本——它们只是坐在链表中,直到它们最终位于链表的头部。当链表很长时,添加一个新的排序计时器的成本会稍高一些,但这可能比花费大量时间循环遍历尚未达到超时的房间的单个时间间隔要好。 nodejs 计时器系统只是一种更有效的方法。

    【讨论】:

    • 谢谢你,我很感激,那我会坚持使用 setTimeout !
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多