每个游戏的NodeJs setTimeout或一个循环每个游戏的setInterval
NodeJs setTimeout for each game or one setInterval that loop each game
我正在尝试为基于角色的浏览器游戏制作服务器,到目前为止我做了什么:
一旦 2 名玩家加入服务器,就会创建一个房间,然后它会开始自己的超时,比如说 10 秒,一旦超时完成,它就会更改其状态并重新运行超时。
我担心如果我有很多房间可能会影响性能,所以我想到了一个想法,即创建一个每秒滴答一次的 setInterval,并循环遍历所有房间以调用更新,在房间一旦调用更新,它将检查上次更新状态与当前时间,如果 10 秒过去了,它将更新到新的开始。
我担心用 setInterval 每秒可能比第一个想法更糟糕,或者相反?
让每个房间都有自己的计时器比让一个频繁 setInterval()
必须遍历所有房间的计时器要高效得多。
nodejs 中的计时器非常高效,可以轻松扩展到数以亿计的计时器。它们存储在排序的链表中,并且只有链表的头部与事件循环中的当前时间进行比较。链表中的所有其他计时器都没有固定成本 - 它们只是位于链表中,直到它们最终位于链表的头部。当链接列表很长时,添加一个新的排序计时器的成本会稍微高一些,但这可能比让一个单独的间隔花费大量时间循环未达到超时的房间要好。 nodejs 计时器系统只是一种更有效的方法。
我正在尝试为基于角色的浏览器游戏制作服务器,到目前为止我做了什么:
一旦 2 名玩家加入服务器,就会创建一个房间,然后它会开始自己的超时,比如说 10 秒,一旦超时完成,它就会更改其状态并重新运行超时。
我担心如果我有很多房间可能会影响性能,所以我想到了一个想法,即创建一个每秒滴答一次的 setInterval,并循环遍历所有房间以调用更新,在房间一旦调用更新,它将检查上次更新状态与当前时间,如果 10 秒过去了,它将更新到新的开始。
我担心用 setInterval 每秒可能比第一个想法更糟糕,或者相反?
让每个房间都有自己的计时器比让一个频繁 setInterval()
必须遍历所有房间的计时器要高效得多。
nodejs 中的计时器非常高效,可以轻松扩展到数以亿计的计时器。它们存储在排序的链表中,并且只有链表的头部与事件循环中的当前时间进行比较。链表中的所有其他计时器都没有固定成本 - 它们只是位于链表中,直到它们最终位于链表的头部。当链接列表很长时,添加一个新的排序计时器的成本会稍微高一些,但这可能比让一个单独的间隔花费大量时间循环未达到超时的房间要好。 nodejs 计时器系统只是一种更有效的方法。