amqp 或 xmpp 用于实时在线游戏
Posted
技术标签:
【中文标题】amqp 或 xmpp 用于实时在线游戏【英文标题】:amqp or xmpp for real time online games 【发布时间】:2011-03-11 00:56:35 【问题描述】:哪些技术套件适用于多用户在线游戏项目。 项目要求: 1.能够在任何给定时间处理2k-5k用户。 2. iphone 和 android 的客户端库(本机,无 javascript)。 3. Microsoft Windows 的客户端库(最重要),也适用于 mac os x 和 linux。 4. 专门用于模组开发的良好文档 5.项目不是开源的。因此,只能使用具有合适许可证的库。
我也可以用 erlang 和 java 编程,编程语言不是问题。
我正在研究以下服务器技术,例如 Openfire、Tigase、ejabberd 和 RabbitMQ。 一切都对我的项目有好处,但我想了解更多关于我需要什么套件,AMQP 或 XMPP。
AMQP 专门为实时在线游戏提供什么。是不是比 xmpp 更好的选择?
【问题讨论】:
【参考方案1】:XMPP 可用于文字游戏。 http://gamerunes.com
【讨论】:
【参考方案2】:5K 用户并没有告诉我太多关于他们的行为,但如果他们都在同一个 10 秒窗口内提交了一个请求,那么假设您将查看每秒 500-1000 个请求。
我的 Active/MQ 在我相对低功率的笔记本电脑上运行,每秒轻松处理 300 个请求,因此我很乐意在此推荐它。您还可以设置代理集群并实现水平可扩展性。您可以使用 http 协议 (STOMP) 或其本机二进制协议。许多客户端 API 库也适用于 C/C++、Java、JavaScript 等。有一些初始的AMQP support。
您没有提到任何持久性要求,但我再次认为大多数 RDBMS 就足够了。也就是说,从水平扩展的角度来看,一些面向文档和大表类型的数据库看起来很有趣。
我还发现 Apache Camel 的性能非常好,我强烈推荐它。 Camel 用于实现你的逻辑层。
'希望这会有所帮助。
【讨论】:
【参考方案3】:XMPP 和 AMQP 之间的主要区别在于二进制内容。 AMQP 可以很好地处理二进制数据,而 XMPP 似乎更适合 XML。对于在线游戏,我个人使用 Google Protocol Buffers 进行消息格式化和解析,由于它们的二进制占用空间非常小,我更倾向于使用 AMQP 来传递这些消息。
但请考虑您要使用的 AMQP 服务器。过去,我一直在为我的 AMQP 服务器使用 RabbitMQ。 RabbitMQ 根本没有任何流控制设施。因此,如果您的客户端发送消息的速度比您的服务器消耗它们的速度快,则服务器上的缓冲区可能会填满并炸毁服务器。较新版本的 RabbitMQ 以极其粗略的方式实现流控制:它们暂停系统中的所有消费者,直到内存被清除。
我从未尝试过 zeromq;也许对于我一直在使用 RabbitMQ 的东西来说会更好......
【讨论】:
【参考方案4】:Linden Labs (Second Life) 的人对许多你应该阅读的消息系统进行了彻底的比较:
http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes
值得一提的是,我在一个项目中使用 zeromq,这真的很有趣,因为根据用例,您不需要代理节点。
【讨论】:
它包含对 AMQP 的详细分析,但几乎没有关于 XMPP 的任何内容。以上是关于amqp 或 xmpp 用于实时在线游戏的主要内容,如果未能解决你的问题,请参考以下文章
XMPP 用于通过 Wi-Fi 在两台 iPad 之间交换游戏信息,好方法吗?
iOS - 带有 WebRTC 的 XMPP 用于实时视频通话或聊天