NodeJs为每个游戏设置Timeout,或者为每个游戏循环一个setInterval



我正试图为基于角色的浏览器游戏制作一个服务器,所以到目前为止我所做的是:

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

我担心如果我有很多房间可能会影响性能,所以我想到了一个想法,那就是创建一个每秒勾选一次的setInterval,并在所有房间中循环调用更新,在房间内调用更新后,它会检查上次更新状态的时间与当前时间的比较,如果10秒过去,它会更新到新的开始。

恐怕使用setInterval的每一秒都可能比第一个想法更糟糕,还是相反?

让每个房间都有自己的计时器比让一个频繁的setInterval()在所有房间中循环要有效得多。

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

最新更新