多人游戏的服务器架构?

时间:2009-03-11 00:10:47

标签: java architecture multiplayer

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

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

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

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

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

3 个答案:

答案 0 :(得分:8)

您需要澄清有关游戏的更多信息,并更多地考虑体系结构而不是具体的实现细节。

主要问题是您的游戏是实时的,基于回合的,还是基于长延迟的(例如,电子邮件国际象棋)。另一个问题是,你是否会为了后续的重装而冻结州。

我强烈建议事先确定同一游戏中的所有玩家是否将在同一服务器上托管(例如,4个玩家匹配中的1000个与每个1000个玩家的4个匹配相比)。如果可能的话,请先使用第一个,并将同一个游戏中的每个人都放在同一台服务器下。您将有足够的时间将多个客户端同步到一个服务器,而不是拥有多个服务器同步的服务器。否则,一致性的定义是有问题的。

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

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

答案 1 :(得分:6)

对于您的服务器架构,您可以查看Three Rings' code。他们用Java编写了许多可扩展的游戏(客户端和服务器端)。

答案 2 :(得分:0)

我也不鼓励使用PHP,但HTTP也不是最好的主意,因为它是无状态和健谈的。我在公司工作了一段时间,目前正在开发真正庞大的多人游戏。后端是普通的JVM(由多个客户端和每个客户端的移动设备连接到tomcat)。所以我知道你在服务器上传输所需的较小缓冲区的数据越少 - >一台机器上有更多客户端,响应速度也快一些。另外考虑安全性,https非常昂贵,特别是如果你需要传输图形和声音。您自己与非浏览器客户端容器的二进制协议将做得最好(良好的选择是开发调试时间的可切换协议)。也许听起来很复杂,但事实并非如此。

@Sarah很好的提示,也谢谢;)