多人游戏的服务器架构?

15

我计划制作一个小型多人游戏,可以在Java applet或Flash文件中运行于web浏览器。我之前没有做过服务器编程,所以想知道应该采用什么样的服务器架构。

对于我来说,在服务器上创建perl/php文件很容易,这些文件可以通过java/flash代码联系更新玩家位置/动作等信息。但我正在考虑是否应该获得专用Web主机,并选择使用哪种操作系统、数据库等。此外,考虑到带宽使用量和可扩展性也是因素。

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

还有一种选择是使用Google App Engine。

欢迎就服务器架构、操作系统/数据库的选择以及我是否采用perl/php/python脚本进行服务器端编程的方法提出任何思路和建议!


你能详细说明这是什么类型的游戏吗?这将有助于我们帮助你 :) - Uri
这将是一个小型多人角色扮演游戏,所以是实时的,而不是回合制的 :) - Ali
我认为最好将所有状态管理在单台机器的内存中,并定期将其备份到数据库中(事务性地?)。这样更容易同步所有客户端。 - Uri
3个回答

8
您需要更明确地澄清游戏的细节,并考虑架构而不是具体实现细节。主要问题是您的游戏是实时、回合制还是长延迟型(例如,电子邮件下棋)?另一个问题是,您是否会冻结状态以供后续重新加载使用?
我强烈建议事先弄清楚同一场游戏中的所有玩家是否将托管在同一台服务器上(例如,1000个4人比赛与4个1000名玩家的比赛相比)。如果可能,选择第一个选项,并将在同一场游戏中的所有人放在同一台服务器下。您将已经很难将多个客户端与一个服务器同步,而不是让多个服务器与玩家同步。否则,一致性的定义将成为难题。
如果可能,让每个客户端与服务器通信,然后由服务器分发更新给客户端。这样,您就会有一个“官方状态”,并且可以进行各种冲突解决、幽灵等操作。点对点在更快的游戏(例如FPS)中具有更好的性能,但会引入大量问题。
我无法想象任何让您用perl或PHP开发游戏的充分理由。既然您的游戏不是基于Web的,为什么要使用面向Web的语言呢?使用好老的J2EE作为服务器,通过XML和AJAX与客户端交换数据。如果可能,让客户端运行真正的Java应用程序而不是servlet。您可以从使用JMS中受益,它将通过为您抽象掉很多通信细节来减轻大量负担。

客户端将作为Java小程序运行。您是指服务器应该运行Java Servlets还是运行完整的应用程序?只是Perl/PHP在服务器上更常见且得到支持,因此我认为在它们中创建服务器代码可能是一个更好的主意。 - Ali
服务器应该是一个完整的应用程序。您可能希望在内存中管理系统状态和客户端之间的同步。 - Uri
如果你在普通的Web服务器上运行perl/php,每个客户端都会有一个单独的进程。如果你在一个能够使用高级语言处理多个请求的多线程服务器上运行,事情可能会更简单。 - Uri
啊,我明白了。但是服务器必须非常强大才能支持那样的需求。你会推荐使用哪种操作系统/数据库?并且你是建议使用云托管还是专用服务器呢? - Ali
3
你可能高估了游戏的要求。我曾在双奔166上运行50个玩家的MUD游戏。读取客户端,处理和更新所有内容。时间跳动,处理和更新所有内容。除非你的“处理”步骤非常庞大(比如神经网络AI),否则网络将首先成为瓶颈。 - Zan Lynx

6

关于您的服务器架构,您可以参考Three Rings的代码。他们用Java编写了许多可扩展的游戏(包括客户端和服务器端)。


2
+1 对于Three Rings - 同时也要查看他们的www.gamegardens.com - 它为想要创建自己的多人游戏的人提供了一个不错且易于入门的入口,通过为您创建游戏框架并让您使用他们的游戏服务器。 - ninesided

0
我也不建议使用PHP,HTTP也不是最好的选择,因为它是无状态且喜欢交流。我曾在一家正在开发大型多人在线游戏的公司工作过一段时间。后端是纯JVM(通过多个客户端连接到tomcat,并从移动设备上的每个客户端连接)。因此,我知道传输的数据越少,服务器所需的缓冲区就越小,可以在一台机器上承载更多的客户端,并且响应速度会更快。此外,还要考虑安全性,HTTPS相当昂贵,特别是如果您需要传输图形和声音。自己的二进制协议与非浏览器客户端容器结合使用效果最佳(在开发-调试期间选择可切换的协议是一个不错的选择)。也许听起来有些复杂,但实际上并不是这样。

@Sarah,好提示,谢谢你。;)

1
顺便提一下,三环和游戏花园的链接正被反P2P守护者封锁,有人知道原因吗? - tomasb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接