游戏是一款低图(SVG)战略游戏。 每个服务器代表一个游戏域及其玩家。 所有服务器都应该能够相互通话,因为玩家可以(在游戏中)从域移动到域/发送“外交信使”等。
我们选择了这个想法,因为它使我们能够无休止地扩大世界地图,它使第二方能够将他们的游戏服务器连接到我们,并使这些世界更加扩大世界。如果一台服务器(及其备份)出现故障,游戏仍将继续运行(真正的分布式环境)。
我们才刚刚开始。我们应该关注哪些平台,这将有助于我们发展这样一个世界?
答案 0 :(得分:4)
XMPP,以前称为Jabber,可能是一个很好的起点。
答案 1 :(得分:1)
这很大程度上取决于您希望在服务器之间共享多少数据。您希望每个服务器都能处理它自己的域,但是帐户数据库,关于谁拥有哪些信息的数据,域的地形,这些数据将是中心和/或分布的,以及如何使它们保持同步。因此,除了游戏的运作之外,还有另一组元数据,服务器需要进行通信。至于游戏数据,您可能会传递事件,数据对象以及有关数据所有权和控制的信息。除此之外,还必须有一些游戏内时钟元数据,以保持域时间同步。
我可能会使用具有不同优先级的异步队列系统来处理元数据,请求和响应消息。像交换消息之类的XMPP协议可以为您带来呈现信息,身份验证,加密和其他优势。但是在开始时,传递协议本身并不像消息的结构和数据的交换那么重要。本质上,交付协议是可以互换的。
示例:一个玩家将游戏单元X从域A发送到域B.域A服务器将带有事件的消息发送到域B服务器。在处理事件队列时,B接收消息并向A上的请求队列发送请求以获取有关单元X的数据以及控制/修改单元X的数据的权限。请求队列具有更高的优先级并将在域A上的其他事件之前处理。域A将请求的数据和控制令牌发送到具有最高优先级的域B响应队列。同时,域B服务器已经处理了3个其他事件,而不是在会话中等待。
重要的是你必须设计数据封装协议,可能是一些XML模式。事件处理协议。事件列表,允许的响应,错误消息,恢复。这些都是游戏特定的。
答案 2 :(得分:0)
我会认真考虑Erlang和CouchDB,或者在Google AppEngine下实现它。
答案 3 :(得分:0)
如果它是真正分发的那么我猜测没有中央服务器的计划。这意味着您真正想要的是各种服务器之间的通信机制。 REST和XML-RPC都是非常简单的机制,服务器能够相互通信以进行用户需要从一个用户移动到另一个用户的通信。
你也可以像丹尼尔所说的那样使用像XMPP这样的东西,但这意味着你必须将另一套服务器软件与你运行游戏本身的任何东西挂钩(我猜你的描述是可能是某种Web应用服务器。)
从开发的角度来看,任何强大的开发Web应用程序的语言/框架都应该有效。 Ruby on Rails,Django上的Python,许多框架加上Java,甚至是带有PHP(ick)的Cake都可以用于开发工作。
我过去曾经考虑过这样的问题,但审查各种服务器的问题(即如何处理破坏或恶意的服务器,让玩家同时将同一块移动到两三台其他服务器上处理丢弃的服务器(那些曾经存在过的玩家会发生什么)等等似乎非常具有挑战性。
答案 4 :(得分:0)
我认为要回答的第一个问题是游戏是实时的还是事件驱动的,以及客户端是否是浏览器。听起来它是事件驱动的,但请记住,服务器无法有效地将结果推送到普通的HTML客户端,只能推送到Java applet,嵌入式Flash电影等。如果你有自定义客户端,那么就不需要使用HTTP了服务器上的风格系统,意思是服务器 - >服务器和服务器 - >客户端通信可以用同样的方式完成。
答案 5 :(得分:0)
你应该看看有关p2p游戏的“兴趣管理”论文,你将面对非常有趣的方法。 Google Schoolar会为您提供非常好的论文。
但请注意,开发分布式应用程序要比简单的单服务器方法复杂得多。