我正在Node.js中创建一个游戏服务器,我认为我有一个良好的服务器循环setInterval()
。但是,我计划制作游戏的方式是让许多小游戏同时运行,这意味着同时发生了许多不同的setInterval()
循环。
同时运行的setInterval()
太多会出现问题,如果有问题,是否有更好的方法来构建我的服务器?例如试图在一个setInterval()
循环中运行游戏的所有实例?
答案 0 :(得分:1)
纯粹的理论问题并没有包含任何代码或数据,答案是肯定的。当然可以同时运行太多setInterval()
次呼叫。
与大多数游戏一样,如果您需要一些可预测的setInterval()
通话时间以保持流畅的游戏流程,那么随着越来越多的通话运行,您将开始失去可预测性跑。因为node.js中的Javascript是单线程事件驱动设计,如果两个setInterval()
调用计划在同一时刻发生,则一个将首先运行而另一个将不会运行,直到第一个调用完成工作。在此之前需要多少才能成为明显的问题取决于你的代码的具体情况 - 你有多少,每个人执行多长时间以及你的游戏对时间上的轻微延迟的容忍度。
由于node.js具有单线程特性,因此单个进程尝试执行大量对时序敏感的事情并不是很好。解决此问题的典型方法是使用多个node.js进程(通常是计算机中每个CPU核心一个),以便获得所有涉及的CPU核心。甚至有些情况下,您试图在您可能希望拥有比CPU内核更多进程的操作之间提升更多公平性,因为这会为您在不同node.js进程中的工作之间提供一些操作系统驱动的时间切片。 / p>
由于我们对您的具体内容一无所知,我们无法说您是否会受益于群集(多个node.js进程都运行相同的代码并且所有共享传入负载)或者使用单独的node.js每个N个游戏实例的应用程序,其中N是你通过测试得出的东西。可能你想要一个特定节点实例处理的单个游戏实例,所以你的模型更像是第二个选项(每个node.js实例有N个游戏实例),但这只是猜测,因为我们没有具体细节。
但正如我在评论中所说,因为你问过一个没有代码而没有数据的纯理论问题,我们所能做的就是假设地回答 - 没有现实世界的代码或数据。