通过对 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 服务器将侦听与“主”网络服务器不同的端口,并且Javascript 跨域安全模型不允许在不同的端口上执行XMLHTTPRequest。
因此,在将 BOSH 请求中继到您选择的 XMPP 服务器时,可能最容易完成完整性检查。深入研究服务器软件可能不是进行此类检查的最佳方式。这将花费很长时间,并且可能会使与游戏的其余部分集成变得更加困难。
另外,我偶然发现了一个提到 XMPP components and ejabberd modules 的答案。这对我来说也是一本有趣的书。
祝你好运,完成后请务必在游戏名称中发表评论——我很乐意看到它:-)
我刚刚注意到有人在您的帖子上发布了very similar question。它的答案包含一些更有趣的信息。
关于将 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: The Definitive Guide"(P. Saint-Andre、Kevin Smith、Remko Tronçon;便宜得多 on Apple's App Store)也让您感觉“为什么事情会按照他们的方式完成are",并记录了 XMPP 的许多小事和各种应用。
之后,实现基于 BOSH 的客户端可能会变得相当容易。除了让按钮播放和暂停之外,我没有使用 Flash 编码的经验,所以请谨慎对待:-)