通过对 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-0124、XEP-0206。
我现在正在阅读的 O'Reilly 书“XMPP:权威指南”(P. Saint-Andre、Kevin Smith、Remko Tronçon;在 Apple 的 App Store 上便宜得多)也让你感觉“为什么要做它们的方式”,并记录了 XMPP 的许多小东西和各种应用程序。
之后,实现基于 BOSH 的客户端可能会变得相当容易。除了让按钮播放和暂停之外,我没有使用 Flash 编码的经验,所以请谨慎对待 :-)