MQTT和XMPP哪一个更好?我应该选择哪一个?

46

概述

我正在一个客户端(安卓手机)和服务器(Windows Server)之间来回发送消息。使用持久连接的TCP协议,哪种协议是最佳解决方案。我关注性能、可扩展性、消息大小和电池寿命。消息必须按顺序到达目的地且不能重复。

MQTT

这似乎是更好的解决方案,但似乎很少有大规模用户实现的示例。我不确定是否可以将其集成到Windows服务器中,或者是否必须运行另一个应用程序或服务器。最后,普遍缺乏关于它的信息。

XMPP

这似乎有许多实现、示例甚至一本书:)。然而,主要目的似乎是用于即时通讯客户端和像Google Talk这样的东西。这将是服务器和客户端之间消息传递的最佳解决方案吗?我知道目前XMPP主要用于客户端到服务器到客户端的体系结构。

如果我理解有误,请纠正我,并提前感谢任何指导。


你为什么特别选择了这两个选项? - dtb
1
从我的谷歌搜索结果来看,它们似乎都可以解决我最初的问题,即通过持久连接向移动设备进行推送/拉取。它们还都处理 XML 消息,这是大部分通信所涉及的。MQTT 引起了我的注意,因为它旨在节省电池寿命(对于手机),并且旨在通过诸如 3G 等慢速连接传递消息。XMPP 似乎是许多人用来处理消息的解决方案,而且它似乎为此构建得非常好。但我也愿意听取建议。 - Scott
顺便提一下,有一个轻巧、便携的 MQTT 客户端可以查看,可以在这里找到:https://github.com/wolfSSL/wolfMQTT。它会提供一些示例,用于快速测试内存大小和性能。 - Sweetness
3个回答

69

这取决于您想要做什么以及您使用的硬件。

MQTT具有非常低的保持活动流量,XMPP是即时通讯协议,并且在处理所有客户端之间的在线状态消息方面具有更高的开销。

如果您受到内存占用的限制,那么必须处理XML解析器可能会使XMPP的使用变得不可能。

请记住,MQTT代表消息队列遥测传输,即它是一种传输协议,根本不定义消息格式-您将不得不提供此格式。XMPP是一种即时通讯协议,它仔细定义了所有消息格式,并要求所有消息都为XML格式。

除此之外:MQTT是一种发布/订阅协议,XMPP是一种即时通讯协议,可以通过扩展(使用XEP-0060)来支持发布/订阅。在架构系统时需要考虑这一点。

我们发现MQTT是一个不引人注目的高效工具。您的使用情况可能会有所不同。

一切都取决于......

追踪LinkedIn最近的公告,其中他们讨论了在其移动应用程序中使用MQTT的情况。

祝好 马克

(顺便说一句,安迪对我们的提及略有偏差。我们位于澳大利亚布里斯班昆士兰大学教育创新与技术中心(CEIT))。


4
我认为你是想说 Facebook 的公告,而不是 LinkedIn。链接是 https://www.facebook.com/notes/facebook-engineering/building-facebook-messenger/10150259350998920。 - ralight
感谢您的回复,我认为我目前在使用MQTT时唯一遇到的问题就是如何将其嵌入到现有的C#服务器中。似乎XMPP会向消息中添加额外的数据,而MQTT则可以很好地放置在TCP连接之上并发送很少的数据。 - Scott
1
如果您的解决方案不需要出席功能,那么您将不会涉及到值班表,因此也不会有由于出席消息而产生的额外开销。尽管XMPP在IM中被广泛使用,但它只是一个实时通信协议。许多扩展是IM特定的,但更多的扩展则不是。 - Robin

13

我认为,简而言之,MQTT相对于XMPP的优势有以下几点:

  • 吞吐能力:开销更小、更轻量级
  • 二进制与纯文本
  • 提供QoS(即发射并忘记、至少一次和恰好一次)
  • 提供发布/订阅功能(XMPP需要扩展XEP-0060)
  • 无需XML解析器

4
虽然你提到的所有观点都是正确的,但有关发布/订阅的观点是具有误导性的。许多XMPP服务器支持XEP-0060,因此它已经“就绪”。你让它听起来好像需要额外的工作或某些东西。在XMPP中,大部分功能都是在扩展中定义的,这些扩展通常只是基于核心定义的基本消息结构的应用级规则。 - Robin

7
我认为你可能正在正确评估XMPP,它是一个主要用于聊天的协议 - 它也相当沉重并广泛使用XML,使其冗长。我知道布里斯班大学CEIT的人员已经专门研究了这两个协议的差异和最佳用法。MQTT非常轻量级且低功耗 - 它已被用于测量和传感器应用程序超过10年,并已由IBM和合作伙伴大规模部署。人们现在发现,像这样的简单协议非常适合移动开发。
您究竟想要实现什么目标? mqtt.org网站旨在提供良好的内容链接。还有关于它的IRC频道和邮件列表。我们如何帮忙?

你有CEIT进行的那些研究的链接吗?我对这个话题很感兴趣,想要阅读更多相关内容。 - dtb
感谢回复,正如我在下面所说,如果我选择MQTT的主要问题是如何将其嵌入到当前编写的C#服务器中。 - Scott
@dtb CEIT页面是http://ceit.uq.edu.au/content/messaging-protocol-applications。 - Andy Piper
@Scott 我相信有几个C#实现的MQTT协议 - 在mqtt.org软件页面上肯定有几个链接。不过我不知道它们有多完整。 - Andy Piper
FYI,这个链接已经失效了。 - Michel Feinstein
1
它已经有九年了...仍然有一些方法可以查看历史记录,例如Wayback Machine。 - Andy Piper

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