【问题标题】:MQTT vs. XMPP Which Should I Choose? [closed]MQTT 与 XMPP 我应该选择哪个? [关闭]
【发布时间】:2011-10-31 02:01:35
【问题描述】:

概述

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

MQTT

这似乎是更好的解决方案,但似乎很少有大量用户的大型实施示例。我不确定我是否可以将它集成到 Windows 服务器中,或者它是否必须是另一个正在运行的应用程序或服务器。最后,总体上似乎缺乏相关信息。

XMPP

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

如果我错了,请纠正我,并提前感谢任何指导。

【问题讨论】:

  • 你为什么特别选择这两个选项?
  • 从我的谷歌搜索结果来看,它们似乎都解决了我最初的问题,通过持久连接推送/拉到移动设备。它们还都处理大部分通信发生的 xml 消息。 MQTT 引起了我的注意,因为它旨在节省电池寿命(用于手机),并且旨在通过 3G 等慢速连接传递消息。 XMPP 似乎是许多人用来处理消息传递的解决方案,而且它似乎为它构建得很好。但我愿意接受建议
  • 附带说明一下,可以在github.com/wolfSSL/wolfMQTT 找到一个要检查的 MQTT 客户端,它是轻量级和便携的。它将提供快速测试内存大小和性能的示例。

标签: c# java android xmpp mqtt


【解决方案1】:

这取决于你想要做什么以及你正在运行什么硬件。

MQTT 的保活流量非常低。 XMPP 是一种 IM 协议,在处理所有客户端之间的状态消息时开销要高得多。

如果您有一个小的内存占用限制,那么必须处理 XML 解析器可能会导致无法使用 XMPP。

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

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

我们发现 MQTT 是安静的成功者。您的里程可能会有所不同。

这一切都取决于...

查看 LinkedIn 最近发布的公告,他们在其中讨论了他们在移动应用中使用 MQTT。

干杯 标记

(顺便说一句,Andy 对我们的提及略有不同。我们在澳大利亚布里斯班昆士兰大学教育创新与技术中心 (CEIT))

【讨论】:

  • 我认为您指的是 Facebook 公告,而不是 LinkedIn。链接是facebook.com/notes/facebook-engineering/…
  • 感谢您的回复,我认为我现在使用 MQTT 遇到的唯一问题是如何将其嵌入到现有的 c# 服务器中。看起来 XMPP 只会向消息中添加额外的数据,而 MQTT 可以很好地位于 TCP 连接之上并发送很少的数据。
  • 如果您的解决方案不需要出席,那么您将不会处理名册,因此不会因出席消息而产生开销。虽然 XMPP 大量用于 IM,但它只是一个实时通信协议。许多扩展是 IM 特定的,但更多不是。
【解决方案2】:

我认为简而言之,MQTT 优于 XMPP 的优势是:

  • 吞吐量容量:开销更少,更轻量级
  • 二进制与纯文本
  • QoS 到位(即发即弃、至少一次和完全一次)
  • Pub/Sub 到位(XMPP 需要扩展 XEP-0060)
  • 无需 XML 解析器

【讨论】:

  • 虽然您的所有观点都是正确的,但关于 pub/sub 的观点具有误导性。许多 XMPP 服务器支持 XEP-0060,因此它已经“到位”。你让它听起来好像有一些额外的工作或需要的东西。 XMPP 中的大部分功能是在扩展中定义的,这些扩展通常只是核心中定义的基本消息结构的应用程序级规则。
【解决方案3】:

我认为您可能正在纠正您对 XMPP 的评估,因为它主要是面向聊天的协议 - 它也是相当重量级的,并且广泛使用 XML 使其冗长。我知道布里斯班大学的 CEIT 人员专门研究了这两种协议的差异和最佳用途。 MQTT 非常轻量级和低功耗 - 它已用于遥测和传感器应用超过 10 年,并已由 IBM 和合作伙伴大规模部署。人们现在发现像这样的简单协议非常适合移动开发。

您到底想要达到什么目标? mqtt.org 网站旨在提供良好的内容链接。还有关于它的 IRC 频道和邮件列表。我们能帮你什么吗?

【讨论】:

  • 你有在 CEIT 进行的那些研究的链接吗?我有兴趣阅读有关此主题的更多信息。
  • 感谢您的回复,正如我在下面所说的,如果我选择 MQTT,主要问题是如何将其嵌入到当前编写的 C# 服务器中。
  • @Scott 我相信有几个 MQTT 协议的 C# 实现——当然有几个是从 mqtt.org 软件页面链接的。不过,我不知道它们有多完整。
  • 已经九岁了……还有一些方法可以查到历史,比如Wayback Machine。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2010-09-26
  • 2013-04-26
  • 1970-01-01
相关资源
最近更新 更多