amqp或xmpp用于实时在线游戏

时间:2010-07-02 10:15:33

标签: xmpp rabbitmq openfire ejabberd

针对多用户在线游戏项目的这些技术套件中的哪一个.. 项目要求: 1.能够在任何给定时间处理2k-5k用户。 2.用于iphone和android的客户端库(原生,没有javascript)。 3.用于Microsoft Windows的客户端库(最重要的),也用于mac os x和linux。 4.专门为mod开发的好文档 5.项目不是开源的。因此,只能使用具有合适许可证的库。

我也可以在erlang和java中编程,编程语言不是问题。

我正在研究以下服务器技术,如Openfire,Tigase,ejabberd和RabbitMQ。 一切都对我的项目有利,但我想了解更多关于我的需求,AMQP或XMPP的内容。

AMQP专门为实时在线游戏提供什么。它是更好的选择,然后xmpp?

4 个答案:

答案 0 :(得分:16)

林登实验室(第二人生)的人员对您应该阅读的许多邮件系统进行了彻底的比较:

http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes

值得一提的是,我在项目中使用zeromq,这非常有趣,因为根据用例,您不需要代理节点。

答案 1 :(得分:7)

XMPP和AMQP之间的关键区别是二进制内容。 AMQP处理二进制数据就好了,而XMPP似乎更适合XML。就网络游戏而言,我使用Google Protocol Buffers进行消息格式化和解析,并且由于它们的二进制占用空间很小,我更倾向于使用AMQP来传递这些消息。

但请考虑您要使用的AMQP服务器。我过去曾经被我的AMQP服务器使用RabbitMQ。 RabbitMQ根本没有任何流量控制设施。因此,如果您的客户端发送的消息速度超过服务器可以使用它们的速度,则服务器上的缓冲区可能会填满并破坏服务器。更新版本的RabbitMQ以极其粗糙的方式实现流量控制:它们停止系统中的所有消费者,直到内存清除。

我从未尝试过zeromq;或许对于我一直在使用RabbitMQ的东西更好......

答案 2 :(得分:5)

5K用户并没有告诉我他们的行为,但如果他们都在同一个10秒窗口内提交了一个请求,那么让我们假设你要查看每秒500-1000个请求。

我在相对低功率的笔记本电脑上运行Active / MQ,每秒可轻松处理300个请求,所以我很乐意在这里推荐它。您还可以设置代理群集并实现水平可伸缩性。您可以使用http协议(STOMP)或其本机二进制协议。许多客户端API库也适用于C / C ++,Java,JavaScript等。有一些初始AMQP support

你没有提到任何持久性要求,但我再次认为大多数RDBMS都足够了。也就是说,从横向扩展的角度来看,一些面向文档和大表类型的数据库看起来很有趣。

我也发现Apache Camel具有高性能,我强烈推荐它。 Camel用于实现您的逻辑层。

'希望这会有所帮助。

答案 3 :(得分:1)

XMPP可用于文字游戏。 http://gamerunes.com