我理解的是JavaScript客户端调用PHP脚本并处理必要的操作,然后将数据传递到AMQP或XMPP服务器以传递给对手玩家。有一本很好的书《Pro XMPP Programming with JS and jQuery》来自Wrox,但其中没有PHP示例。因此,以下是我的问题。
1)哪种协议适合我的游戏?
2)我应该选择RabbitMQ仅因为它支持PHP客户端吗?
我选择使用ejabberd
的个人原因很简单——在Debian上安装和配置都非常容易。虽然对于Erlang和Java我了解甚少,但我知道Erlang有助于轻松实现可伸缩性,而ejabberd
的开发者也声称他们做到了。
如果你想进行服务器端逻辑检查,恐怕我不知道有什么好的方法。我会使用代理PHP脚本对传入的XMPP BOSH消息进行合理性检查,然后转发到服务器,而不是直接通过Apache's mod_rewrite
转发。
正如上面提到的,由于XMPP服务器将侦听与“主”Web服务器不同的端口,而Javascript跨域安全模型不允许在不同的端口上执行XMLHTTPRequest
,因此肯定需要进行某种形式的代理(使用mod_rewrite
或PHP或其他方式)。
因此,在将BOSH请求中继到您选择的XMPP服务器时,合理性检查可能是最容易的。深入挖掘服务器软件可能不是进行此类检查的最佳方法。这可能会花费很长时间,并且可能会使其更难与您的游戏的其余部分集成。
另外,我偶然发现了一个提到XMPP组件和ejabberd模块的答案。这对我来说也是一个有趣的阅读。
祝好运,并且在完成后一定要留下评论并注明游戏名称——我很想看看它 :-)
关于使用XMPP和Flash:
你仍然可以使用HTTP绑定(BOSH)与Flash一起使用。实际上,虽然HTTP绑定允许Javascript访问XMPP,但它是为各种应用程序而设计的,例如经常会断开连接的移动连接。
我主要通过观察基于Web的客户端JWChat和ejabberd之间的通信,以及跨平台客户端Psi和ejabberd之间的通信(了解有关协议本身的信息),来弄清如何建立连接。使用JWChat和WebKit的Web Inspector或Firefox的Firebug,可以轻松跟踪向服务器执行的XMLHttpRequests。使用Psi,可以打开XML控制台并阅读通信日志。结合使用您选择的语言原型客户端,学习BOSH和XMPP非常容易。
此外,以下XEP非常有用:XEP-0124,XEP-0206。
我正在阅读的O'Reilly书籍"XMPP: The Definitive Guide"(作者P. Saint-Andre,Kevin Smith和Remko Tronçon;在苹果应用商店上便宜得多),也让你了解“为什么会这样做”,并记录了许多关于XMPP的小细节和各种应用。AMQP目前还没有达到1.0版本,它周围存在一些可能的设计问题。PHP有XMPP客户端,所以如果我是你,我会先尝试一下这个。
如有人提到,您需要考虑客户端到服务器部分;那似乎更为重要。
听起来您已经拥有了这个主题上最好的书(Jack Moffit 的 XMPP + JS 书),我肯定会说这是应该采用的技术。
此外,您还可以获得用户身份验证、加密以及所有许多 XMPP 协议扩展,正如书中所描述的那样。
即使我无法推荐任何 PHP-XMPP 客户端,但我认为您可能不会在 AMQP 中获得同样级别的即插即用功能。
此外,如果您熟练掌握其他语言,并根据所需的游戏逻辑量,您可以编写一个 XMPP 服务器组件。请参见此先前有关 XMPP + 游戏的问题:
XMPP C# Interaction