AMQP或XMPP用于实时在线游戏

13

以下哪种技术适用于多用户在线游戏项目?

项目要求:

  1. 能够同时处理2k-5k个用户。
  2. 为iPhone和安卓(原生,不是JavaScript)提供客户端库。
  3. 为Microsoft Windows(最重要),以及Mac OS X和Linux提供客户端库。
  4. 有详细的文档,特别是针对mod开发的文档。
  5. 该项目不是开源的。因此,只能使用适当许可证的库。

我也可以使用Erlang和Java进行编程,编程语言不是问题。

我正在研究以下服务器技术,如Openfire、Tigase、ejabberd和RabbitMQ。 所有这些技术都适用于我的项目,但我想更了解哪个技术更适合我的需求,AMQP还是XMPP。

AMQP在实时在线游戏方面提供了什么?它比XMPP更好吗?

2个回答

7
XMPP和AMQP之间的一个关键区别是二进制内容。 AMQP可以很好地处理二进制数据,而XMPP似乎更适用于XML。 就在线游戏而言,我个人使用Google Protocol Buffers进行消息格式化和解析,并且由于其非常小的二进制占用空间,我更倾向于使用AMQP传递这些消息。
但请考虑您想要使用的AMQP服务器。 我以前曾因使用RabbitMQ作为我的AMQP服务器而遭受打击。 RabbitMQ根本没有任何流量控制设施。 因此,如果您的客户端发送消息的速度比服务器消费它们的速度快,服务器上的缓冲区可能会填满并使服务器崩溃。 RabbitMQ的最新版本以一种极为粗略的方式实现了流量控制:它停止系统中的所有消费者,直到内存清除为止。
我从未尝试过zeromq;也许对于我一直在使用RabbitMQ的事情来说,它会更好...

5

5千用户的行为对我来说并没有太多意义,但如果他们在相同的10秒窗口内都提交了一个请求,那么你需要处理每秒500-1000个请求。

我曾在我的低功耗笔记本上运行Active/MQ,轻松处理300个请求/秒,因此我很乐意在这里推荐它。您还可以设置经纪人集群并实现横向扩展。您可以使用HTTP协议(STOMP)或其本机二进制协议。还有许多客户端API库可供C/C ++、Java、JavaScript和其他语言使用。还支持一些初始的AMQP协议

您没有提到任何持久性要求,但我认为大多数关系型数据库管理系统都足够。话虽如此,从横向扩展的角度看,一些文档导向和大表类型的数据库似乎更有趣。

我还发现Apache Camel非常高效,强烈推荐使用。Camel用于实现逻辑层。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接