amqp或xmpp用于实时在线游戏

use*_*930 15 xmpp openfire ejabberd rabbitmq

这些技术套件适用于多用户在线游戏项目..项目要求: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是更好的选择吗?

ito*_*res 16

Linden Labs(Second Life)的人员对您应该阅读的许多消息传递系统进行了彻底的比较:

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

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


Uno*_*oti 7

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

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

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


Chr*_*unt 5

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

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

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

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

'希望这会有所帮助.