java - 多人游戏的服务器架构?

标签 java architecture multiplayer

<分区>

我打算构建一个小型多人游戏,它可以作为 java applet 或网络浏览器中的 flash 文件运行。我以前没有做过任何服务器编程,所以我想知道我应该拥有什么样的服务器架构。

我很容易在服务器上创建 perl/php 文件,java/flash 代码联系这些文件来更新玩家位置/ Action 等。但我正在考虑是否应该获得一个专用的网络主机,使用哪个操作系统,哪个数据库等。此外,使用的带宽量和可伸缩性也是一个考虑因素。

另一种选择可能是使用云托管系统(而不是专用服务器),这样他们会随着游戏的发展增加额外的机器。只要每台服务器都运行核心 perl/php 文件来更新数据库,它应该可以正常工作。

另一种选择是使用 Google 应用引擎。

关于服务器架构、操作系统/数据库选择以及我使用 perl/php/python 脚本进行服务器端编程的方法是否合适的任何想法,将不胜感激!

最佳答案

您需要更多地了解游戏,并更多地考虑架构而不是具体的实现细节。

主要问题是您的游戏是实时的、回合制的还是长时间延迟的(例如,电子邮件国际象棋)。另一个问题是您是否要卡住状态以供后续重新加载。

我强烈建议提前弄清楚同一游戏中的所有玩家是否都将托管在同一服务器上(例如,4 人比赛中的 1000 场比赛与每场比赛 1000 人比赛中的 4 场比赛相比)。如果可能的话,选择第一个,将同一游戏中的每个人都放在同一服务器下。您将有足够的时间将多个客户端同步到一个服务器,而不是让玩家同步多个服务器。否则,一致性的定义是有问题的。

如果可能,让每个客户端与服务器通信,然后服务器将更新分发给客户端。这样你就有了一个“官方状态”,并且可以进行各种冲突解决、幻影等。点对点在更快的游戏(例如 FPS)中提供更好的性能,但会引入大量问题。

我这辈子都看不出有任何令人信服的理由来使用 perl 或 PHP 来做这件事。您的游戏不是基于网络的,为什么要用面向网络的语言编写它?为服务器使用良好的旧 J2EE,并通过 XML 和 AJAX 与您的客户端交换数据。如果可能,在客户端而不是 servlet 上运行真正的 Java 应用程序。然后,您可以从使用 JMS 中受益,它会为您提取大量通信细节,从而减轻您的负担。

关于java - 多人游戏的服务器架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/632793/

相关文章:

javascript - Redux 与自定义钩子(Hook)

java - 如何让起始玩家等待轮到第二个回合制多人游戏

google-play - 谷歌玩游戏实时多人游戏如何获得快速匹配玩家的名字?

android - 创建在线游戏的最佳方法?

java - java中的可选参数(可以为空)

java - Android 6.0 以上版本无法通过广播接收器获取通知

java - FileOutputStream 打开一个新文件并在创建时删除内容

java - 仅识别与新闻稿页面相关的链接

architecture - cmake - 创建架构感知 makefile

java - 用于初始化依赖于另一个应用程序 EJB 的 EJB 的模式