6

我在 AMQP (RabbitMQ) 与 XMPP (eJabberd) 之间进行选择,用于我的基于浏览器的无闪存 javascript 驱动的实时回合制游戏。我不太了解 AMQP 和 XMPP 协议。我想使用 PHP 进行用户授权,并使用 MySQL 进行一些数据存储检索。据我所知,RabbitMQ 有 PHP 客户端,但 eJabberd 没有。

我的理解是javascript客户端调用PHP脚本并操作必要的处理,然后传递给AMQP或XMPP服务器将数据传递给对手玩家。Wrox 有一本好书“Pro XMPP Programming with JS and jQuery”,但没有关于 PHP 的示例。所以以下是我的问题。

1) 哪种协议适合我的游戏?

2) 我是否应该仅仅因为它的 PHP 客户端支持而选择 RabbitMQ?

4

3 回答 3

9

通过对 XMPP BOSH 使用 HTTP Bind 方法,我在 Javascript 中实现了 XMPP 客户端取得了相当大的成功。我不了解 AMQP,但对于客户端访问,我喜欢 XMPP。几句话为什么。

ejabberd 已经包含 BOSH 支持,并且要与 Javascript(可能还有 Flash)一起使用,您只需指示您的服务器将请求重定向到您配置 ejabberd 以侦听 HTTP 请求的端口。(甚至这只是因为当今浏览器中的 Javascript 安全模型禁止对不同域甚至不同端口的 Javascript 请求。)

由于 XMPP 是一堆非常琐碎的小型 XML 文档,因此用您选择的任何语言对它们进行编码都应该相当容易。

由于它得到了广泛的支持,您也许可以避免要求您的用户注册您的服务,他们肯定会喜欢的。

实施 XMPP 意味着您可以轻松地为您的游戏添加即时消息支持,并与 Jabber 网络的其余部分(包括 Google Talk)联合。

因为我对 AMQP 一无所知,所以我无法比较它们——但我可以说为什么我在未来的多人游戏项目中总是首先考虑 XMPP。


我个人选择的原因ejabberd很简单——在 Debian 上安装和配置超级容易。我对 Erlang 和 Java 几乎完全不熟悉;然而,我对 Erlang 的理解是,它使可伸缩性很容易实现,ejabberd人们说他们已经实现了。

如果你想做服务器端的逻辑检查,恐怕我不知道有什么好的方法。我会使用代理 PHP 脚本对传入的 XMPP BOSH 消息进行完整性检查,然后将其转发到服务器,而不是仅通过 Apache 的mod_rewrite.

如上所述,您肯定需要进行某种代理(mod_rewrite使用 PHP 或以其他方式),因为 XMPP 服务器将侦听与“主”Web 服务器不同的端口,以及 Javascript 跨域安全模型不允许XMLHTTPRequest在不同的端口上做。

因此,在将 BOSH 请求中继到您选择的 XMPP 服务器时,完整性检查可能是最容易完成的。深入研究服务器软件可能不是进行此类检查的最佳方式。这将花费很长时间,并且可能会使与游戏的其余部分集成变得更加困难。

或者,我偶然发现了一个提到XMPP components 和 ejabberd modules的答案。这对我来说也是一本有趣的书。

祝你好运,完成后请务必在游戏名称中发表评论——我很乐意看到它 :-)


我刚刚注意到其他人发布了一个与您的问题非常相似的问题。它的答案包含一些更有趣的信息。


关于将 XMPP 与 Flash 一起使用:

尽管如此,您仍可以将 HTTP 绑定 (BOSH) 与 Flash 一起使用。事实上,虽然 HTTP 绑定允许 Javascript 访问 XMPP,但它是为各种应用程序设计的,例如经常中断的移动连接。

我主要通过观察基于 Web 的客户端 JWChat 和 ejabberd 之间的通信(有关 BOSH 的信息)以及跨平台客户端 Psi 和 ejabberd 之间的通信(有关协议本身的信息)来弄清楚如何建立连接。使用 JWChat 和 WebKit 的 Web Inspector 或使用 Firebug for Firefox,可以轻松地跟踪正在向服务器执行的 XMLHttpRequest。使用 Psi,可以打开 XML 控制台并读取通信日志。结合使用您选择的语言对客户端进行原型设计,学习 BOSH 和 XMPP 变得非常容易。

此外,以下 XEP 也很有用:XEP-0124XEP-0206

我现在正在阅读的 O'Reilly 书“XMPP:权威指南”(P. Saint-Andre、Kevin Smith、Remko Tronçon;在 Apple 的 App Store 上便宜得多)也让你感觉“为什么要做它们的方式”,并记录了 XMPP 的许多小东西和各种应用程序。

之后,实现基于 BOSH 的客户端可能会变得相当容易。除了让按钮播放和暂停之外,我没有使用 Flash 编码的经验,所以请谨慎对待 :-)

于 2010-10-08T22:42:21.280 回答
1

AMQP 还没有达到 1.0 版,并且有一些可能的设计问题。PHP 有 XMPP 客户端,所以如果我是你,我会先尝试一下。

于 2010-05-30T16:43:17.523 回答
1

正如有人提到的,您需要考虑客户端到服务器的部分;这似乎更重要。

听起来您已经拥有关于该主题的最佳书籍(Jack Moffit 的 XMPP + JS 书籍),我肯定会说这是可以使用的技术。

此外,您还可以获得用户身份验证、加密和所有许多 XMPP 协议扩展,正如本书将描述的那样。

尽管我不能推荐任何 PHP-XMPP 客户端,但我认为您不一定会拥有与 AMQP 相同级别的开箱即用功能。

此外,如果您精通其他语言,并且根据所需的游戏逻辑量,您可以编写 XMPP 服务器组件。有关信息,请参阅有关 XMPP + 游戏的先前问题:
XMPP C# Interaction

于 2010-05-30T21:14:08.047 回答