我打算建立一个小型多人游戏,可以在网络浏览器中作为java applet或flash文件运行.我以前没有做过任何服务器编程,所以我想知道我应该拥有什么样的服务器架构.
我很容易在服务器上创建perl/php文件,java/flash代码联系以更新播放器位置/动作等等.但我正在考虑是否应该获得专用的Web主机,哪个操作系统使用,哪个数据库等.此外,使用的带宽量和可扩展性是一个考虑因素.
另一种选择可能是使用云托管系统(而不是专用服务器),因此随着游戏的发展,他们将负责添加额外的机器.只要每个服务器运行核心perl/php文件来更新数据库,它应该可以正常工作.
另一种选择可能是使用Google应用引擎.
有关服务器体系结构,操作系统/数据库选择以及我的使用perl/php/python脚本进行服务器端编程的方法是否合适的任何想法,将不胜感激!
您需要澄清有关游戏的更多信息,并更多地考虑架构而不是具体的实现细节.
主要问题是您的游戏是实时的,基于回合的还是基于长延迟的(例如,电子邮件国际象棋).另一个问题是,你是否会为了后续的重装而冻结州.
我强烈建议事先确定同一游戏中的所有玩家是否将被托管在同一台服务器上(例如,4个玩家匹配中的1000个与每个1000个玩家的4个匹配相比).如果可能的话,请先使用第一个,并将同一个游戏中的每个人都放在同一台服务器下.您将有足够的时间将多个客户端同步到一个服务器,而不是拥有多个服务器同步的服务器.否则,一致性的定义是有问题的.
如果可能,让每个客户端与服务器通信,然后服务器将更新分发给客户端.通过这种方式,您可以拥有一个"官方状态",可以执行各种冲突解决方案,幻像等.点对点可以在更快的游戏(例如FPS)中提供更好的性能,但会引入大量问题.
我不能为我的生活看到任何令人信服的理由去做这个和perl或PHP.您的游戏不是基于网络的,为什么要用面向Web的语言编写?将良好的旧J2EE用于服务器,并通过XML和AJAX与客户交换数据.如果可能,在客户端而不是servlet上运行真正的Java应用程序.然后,您可以通过使用JMS来获益,这将通过为您抽象出大量的通信细节来减轻您的负担.
对于您的服务器体系结构,您可能会看一下Three Rings的代码.他们用Java编写了许多可扩展的游戏(客户端和服务器端).