该游戏是一款低图形(SVG)策略游戏。每个服务器代表一个游戏域及其玩家。所有服务器应该能够相互通信,因为玩家可以(在游戏中)从一个域移动到另一个域/发送“外交信使”等。

我们选择这个想法是因为它使我们能够无限地扩大世界地图,它使第二方能够将他们的游戏服务器连接到我们,从而进一步扩大世​​界。如果一台服务器(及其备份)发生故障,游戏仍将继续运行(真正的分布式环境)。

我们才刚刚开始。我们应该关注哪些平台来帮助我们发展这样一个世界?

有帮助吗?

解决方案

XMPP,以前称为Jabber,可能是一个很好的起点。

其他提示

这很大程度上取决于您想要在服务器之间共享多少数据。您希望每个服务器处理它自己的域,但是帐户数据库、有关谁拥有哪些信息的数据、域的拓扑,这些数据将是集中的和/或分布式的,以及如何保持它们同步。因此,除了游戏的运作之外,还有另一组元数据,服务器需要对其进行通信。至于游戏数据,您可能会传递事件、数据对象以及有关数据所有权和控制的信息。除此之外,还必须有一些游戏内时钟元数据来保持域时间同步。

我可能会使用具有不同优先级的异步队列系统来处理元数据、请求和响应消息。像 XMPP 这样的基于交换消息的协议可以为您带来状态信息、身份验证、加密和其他优势。但一开始,传递协议本身并不像消息结构和数据交换那么重要。本质上,交付协议是可以互换的。

例子: 一名玩家将游戏单元 X 从域 A 发送到域 B。域 A 服务器将带有事件的消息发送到域 B 服务器。在处理事件队列时,B 接收消息并向 A 上的请求队列发送请求,以获取有关单元 X 的数据以及控制/修改单元 X 数据的权限。请求队列具有较高的优先级,将在域 A 上的其他事件之前得到处理。域A将请求的数据和控制令牌以最高优先级发送到域B响应队列。同时域B服务器已经处理了另外3个事件,不在会话中等待。

  • 笔记: 此时,A 应废弃、版本化或删除有关单元 X 的数据。如果来自域 C 的数据请求,从现在起它应该将该请求转发到服务器 B。
  • 笔记: 上面的示例可以优化为直接通过相应的事件发送有关单元 X 的数据,但我想要一个简单的示例来说明。

重要的是您必须设计数据封装协议,可能是一些 XML 模式。事件处理的协议。事件列表、允许的响应、错误消息、恢复。这些都是游戏特定的。

我会认真考虑Erlang和CouchDB,或者在Google AppEngine下实现它。

如果它是真正分发的那么我猜测没有中央服务器的计划。这意味着您真正想要的是各种服务器之间的通信机制。 REST和XML-RPC都是非常简单的机制,服务器能够相互通信以进行用户需要从一个用户移动到另一个用户的通信。

你也可以使用像丹尼尔所说的像XMPP这样的东西,但这意味着你必须将另一套服务器软件与你运行游戏本身的任何东西挂钩(我猜你的描述是可能是某种Web应用服务器。)

从开发的角度来看,任何强大的开发Web应用程序的语言/框架都应该有效。 Ruby on Rails,Django上的Python,许多框架加上Java,甚至是带有PHP(ick)的Cake都可以用于开发工作。

我过去曾经考虑过这样的问题,但审查各种服务器的问题(即如何处理破坏或恶意的服务器,让玩家同时将同一块移动到两三台其他服务器上处理丢弃的服务器(那些曾经存在过的玩家会发生什么)等等似乎非常具有挑战性。

我认为要回答的第一个问题是游戏是实时的还是事件驱动的,以及客户端是否是浏览器。听起来它是事件驱动的,但请记住,服务器无法有效地将结果推送到普通的HTML客户端,只能推送到Java applet,嵌入式Flash电影等。如果你有自定义客户端,那么就不需要使用HTTP了服务器上的风格系统,意思是服务器 - >服务器和服务器 - >客户端通信可以用同样的方式完成。

您应该查看“兴趣管理”关于p2p游戏的论文,你将面临非常有趣的方法。 Google Schoolar会为您提供非常好的论文。

但请注意,开发分布式应用程序要比简单的单服务器方法复杂得多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top