通过WebSocket直接MQTT与MQTT

时间:2015-06-03 15:48:18

标签: websocket mqtt

与直接MQTT相比, MQTT over WebSocket 的优点是什么?

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

7 个答案:

答案 0 :(得分:29)

如果您打算直接从webapps(在页面中)发布/订阅消息,您应该只需要在websockets上运行MQTT。

基本上我会为所有东西运行纯MQTT,只有在你真正需要时才添加websockets。

对于所有非浏览器语言,MQTT客户端库仅使用本机MQTT。对于Javascript,有一个纯MQTT库和页面库中使用websockets的Paho。

编辑: 防火墙隧道用例是在websockets上使用MQTT的正当理由,因为写这个答案更多的是没有web / JavaScript客户端库增加了支持

答案 1 :(得分:16)

如果某个网页是发送或接收MQTT客户端,则基于websockets的MQTT是完美的。

可以找到MQTT相对于websockets的功能的一个很好的总结here

答案 2 :(得分:16)

在Websockets上使用MQTT的两个主要原因(实际上意味着通过HTTP / HTTPS):

  • 网络应用程序(在浏览器中运行的应用程序 - 例如用JavaScript编写)
  • 任何其他不想使用1883/8883端口且希望通过HTTP / HTTPS转换的应用程序 - 这可能会使防火墙被阻止的可能性降低(例如,一个企业网络),因为大多数防火墙都会让HTTP流量通过

如果您不需要或担心上述情况,请使用"直接" MQTT:

  • 效率更高
  • 有更多客户端库可供各种语言使用" direct" MQTT

答案 3 :(得分:12)

MQTT是一种支持以下的协议:

  • 提供发布/订阅机制
  • 服务质量政策
  • 沟通开销最小
  • 专为窄带通信通道而设计 约束设备。

根据设备的不同,可以使用实施方案。

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

Android:他们是一个用Java编写的MQTT客户端库,用于在Android上开发应用程序。见Eclipse Paho Android Service

所以这取决于将要使用此功能的设备。有关标准和规格,请访问MQTT Version 3.1.1

希望这有帮助。

干杯!

答案 4 :(得分:6)

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

答案 5 :(得分:2)

使用MQTT over websockets,每个浏览器都可以是MQTT设备。

由于MQTT的发布/订阅模式,只要您订阅了正确的主题,就会在事件发生时(实际上是世界上任何地方)实时推送到您的浏览器。

对于基于WebSockets的MQTT,websockets连接形成MQTT协议的外部管道。服务器/代理将MQTT数据包放入websockets数据包并将其发送到客户端/服务器。客户端/服务器从websockets数据包中解压缩MQTT数据包,然后将其作为普通的MQTT数据包进行处理。

enter image description here

此外,它对物联网有很大的影响。有关详细信息,请阅读以下文档。

SAP Cloud Platform Internet of Things

AWS IoT

MQTT over Websockets with HiveMQ

答案 6 :(得分:0)

MQTT经纪人:

MQTT客户端的对应对象是MQTT代理。代理是任何发布/订阅协议的核心。根据实现的不同,代理可以处理多达数千个并发连接的MQTT客户端。

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

WebSocket: 我们在MQTT Essentials中了解到MQTT非常适合受约束的设备和不可靠的网络。它也非常适合发送开销很小的邮件。直接在移动电话的浏览器中或一般情况下发送和接收MQTT消息将非常不错。通过WebSocket上的MQTT可以做到这一点。

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