直接使用MQTT与通过WebSocket传输的MQTT之间的区别

74

MQTT与WebSocket相比,有哪些优点?

我正在考虑在我的项目中使用MQTT,因此我想知道为什么有些人选择使用MQTT而不是直接使用MQTT。

6个回答

45

如果您打算直接在Web应用程序(页面内)中发布/订阅消息,则只需要使用MQTT通过Websockets运行。

基本上,我会为所有内容都运行纯MQTT,只有在确实需要时才添加Websockets。

对于所有非浏览器语言,MQTT客户端库只使用本地MQTT协议。 对于JavaScript,有一个纯MQTT库和使用Websockets的Paho In-Page库。

编辑:防火墙隧道使用情况是使用MQTT通过Websockets的有效原因,并且自回答撰写以来,更多非Web/JavaScript客户端库已添加了支持。


1
用户5762813和Vasif概述的企业防火墙案例在许多情况下实际上非常重要。我希望我的设备能够连接到代理,即使它们只能通过HTTP代理访问互联网。 - Joppe

33
使用MQTT而不是Websockets的两个主要原因(这实际上意味着通过HTTP/HTTPS进行)有:
  • Web应用程序(在浏览器中运行的应用程序,例如用JavaScript编写的应用程序)
  • 任何其他不想使用1883 / 8883端口并希望改为使用HTTP / HTTPS的应用程序。这可能是为了减少被防火墙阻止的机会(例如在企业网络中),因为大多数防火墙会允许HTTP流量通过
如果您不需要或担心上述问题,请使用“直接”MQTT:
  • 它更有效
  • 有更多的客户端库可用于各种语言,适用于“直接”MQTT

6
说“这实际上意味着通过HTTP / HTTPS进行”,并不完全准确。 WebSocket的优点在于它们基本上不使用HTTP / HTTPS和隐含的开销。请阅读《HTML5 WebSocket:Web可扩展性的飞跃》以获取所有详细信息。 - Sean

22

MQTT是一种协议,支持以下操作:

  • 提供发布/订阅机制
  • 质量服务策略
  • 在通信中具有最小的开销
  • 专门为窄带通信渠道和受限设备设计。

根据设备的不同,可以使用相应的实现。

浏览器:它使用WebSocket。 WebSocket为浏览器提供了建立全双工通信的能力。有JavaScript库实现MQTT功能,请参见Eclipse Paho JavaScript Client

Android:有用于Android应用程序开发的Java编写的MQTT客户端库。请参见Eclipse Paho Android Service

因此,这取决于将使用此功能的设备。有关标准和规范,请访问MQTT Version 5.0

希望这有所帮助。

干杯!


19

如果某个网页是MQTT客户端的发送或接收者,那么通过Websockets传输MQTT非常理想。

有关MQTT over Websockets的功能概述可以在这里找到:这里


8

如果应用程序运行在只允许443和80流量的防火墙后面,并且您无法控制防火墙的策略,那么通过Web套接字传输MQTT也是有帮助的。


3
MQTT本身并不会阻止您使用443或80端口,只要您使用TLS / DTLS(加密)即可。我猜防火墙理论上可以阻止在80端口上的非HTTP流量,但如果您使用TLS,则它无法知道它是HTTP,并且很少有情况下您不想使用TLS来保护连接的设备。 - Code Wiget

2

MQTT Broker:

MQTT经纪人是MQTT客户端的对应物。经纪人是任何发布/订阅协议的核心。根据实现方式,经纪人可以处理高达数千个并发连接的MQTT客户端。

MQTT Client: 当我们谈论客户端时,几乎总是指MQTT客户端。发布者和订阅者都是MQTT客户端。发布者和订阅者标签是指客户端当前是发布消息还是订阅消息(发布和订阅功能也可以在同一个MQTT客户端中实现)。

WebSocket: 我们已经学习到MQTT非常适合受限设备和不可靠网络。它也非常适合以非常低的开销发送消息。直接在手机浏览器或其他浏览器中发送和接收MQTT消息会非常方便。这可以通过MQTT over WebSockets实现。

您可以使用第三方协议。PAHO、EMQTT、VerneMQ。


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