我正处于一个移动多玩家实时游戏的规划阶段,我正在考虑实现什么架构,以便跟踪游戏大厅内的状态。
我已经考虑过让游戏要么点对点,在同一游戏大厅内的所有设备(最多4个玩家)将发射他们的位置给其他玩家,随着游戏的进行。我还考虑过让玩家连接到服务器,服务器跟踪游戏状态并将状态发送给每个玩家。
如果我真的走这条路,使用node实现服务器,我需要考虑哪些问题?
我有一个预测,可扩展性将是一个主要问题,因为服务器必须跟踪每一个游戏大厅的状态,这是名义上运行在60 fps。如果我有100个活跃的游说团体,我可以预见可能出现的问题。会是这种情况吗?我应该研究一种不同的网络架构吗?或者,我是否可以在服务器达到最大值之前获得很大的容量?
很大程度上取决于游戏的种类。点对点解决方案可能是棘手的,作弊将是相当容易的,除非你验证它在每一个客户端,但由于你想运行它在移动客户端,这将使游戏的速度减慢很多。
在中央服务器上验证数据并将验证后的数据发送出去更有意义。
一般来说,FPS对服务器来说根本不重要。每个客户端只是向服务器发送用户输入,而不是每个帧(按下按钮-释放按钮)。服务器使用所有这些信息,并计算需要发生的情况,定期向客户端发送更新。然后客户端呈现过去200ms(真的取决于游戏的种类)那样的一切,并“预测”服务器在下一次更新中将发送的内容,使其看起来流畅。只要阅读一下这篇文章,它比我以前更好地解释了它:https://developer.valvesoftware.com/wiki/source_multiplayer_networking
但是是的,它将需要更多的权力比一个正常的网站。然而,单个大堂不需要相互通信,所以您可以超级容易地只需并行使用3台服务器。您可以期望Node与您所拥有的大多数替代方案相比表现得相当好,因为它非常好地处理了并发连接。只需确保您不运行CPU负担沉重的东西,因为这几乎会杀死节点(如果您只是接收状态更新,并使用基本的数学方法验证它,然后再次发送它>;这是完美的选择)。
希望那会有帮助
您将遇到的最大问题是,Node的构建不是为了处理像实时模拟那样对延迟敏感的应用程序。
HTTP是一个臃肿的协议,它是基于文本的。它将不工作的类型的游戏,大多数人会认为多人。它可能适用于不存在高延迟问题的游戏,比如facebook游戏。