直接MQTT与WebSocket上的MQTT

直接MQTT与WebSocket上的MQTT,websocket,mqtt,Websocket,Mqtt,与直接MQTT相比,MQTT优于WebSocket有哪些优点 我正在考虑在我的项目中使用MQTT,因此我想知道为什么有些人选择MQTT而不是直接MQTT。如果您打算直接从webapps中发布/订阅消息(在第页),您应该只需要在websockets上运行MQTT 基本上,我会为所有内容运行纯MQTT,并且只在您实际需要时添加WebSocket 对于所有非浏览器语言,MQTT客户端库仅使用本机MQTT。对于Javascript,有一个纯MQTT库和使用WebSocket的Paho-in-page库

与直接MQTT相比,MQTT优于WebSocket有哪些优点


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

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

基本上,我会为所有内容运行纯MQTT,并且只在您实际需要时添加WebSocket

对于所有非浏览器语言,MQTT客户端库仅使用本机MQTT。对于Javascript,有一个纯MQTT库和使用WebSocket的Paho-in-page库

编辑:
防火墙隧道用例是在websockets上使用MQTT的一个有效理由,并且由于编写了此答案,更多的非web/JavaScript客户端库添加了支持

如果某个网页是发送或接收MQTT客户端,那么websockets上的MQTT是完美的


关于WebSocket上MQTT的功能,可以找到一个很好的总结

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

  • Web应用程序(在浏览器中运行的应用程序-例如,用JavaScript编写的应用程序)
  • 任何其他不想使用1883/8883端口并希望改为通过HTTP/HTTPS的应用程序-这可以减少被防火墙阻止的可能性(例如,在公司网络中),因为大多数防火墙将允许HTTP流量通过
如果您不需要或不担心上述问题,请使用“direct”MQTT:

  • 效率更高
  • 对于使用“direct”MQTT的各种语言,有更多的客户端库

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

  • 提供发布/订阅机制
  • 服务质量政策
  • 在通信方面有最小的开销
  • 专为窄带通信信道和
    受约束的设备
根据设备的不同,有一个可用的实现

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

Android:There是一个用Java编写的MQTT客户端库,用于在Android上开发应用程序。看

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

希望这有帮助


干杯

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

MQTT代理:

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

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

WebSocket: 我们在MQTT Essentials中了解到,MQTT非常适合于受约束的设备和不可靠的网络。它还非常适合以极低的开销发送消息。直接在移动电话的浏览器中或一般情况下发送和接收MQTT消息是非常好的。这可以通过WebSocket上的MQTT实现


您可以使用第三方协议。泛美卫生组织、EMQTT、VerneMQ.

说“这实际上意味着通过HTTP/HTTPS”是不对的。WebSocket的优势在于,它们基本上不使用HTTP/HTTPS和隐含的开销。通读(HTML5WebSocket:网络可扩展性的一次重大飞跃)[关于所有细节。user5762813和Vasif概述的公司防火墙案例实际上在许多设置中都非常重要。我希望我的设备能够连接到代理,即使它们只能通过HTTP代理访问internet。MQTT并没有阻止您使用443或80,或者如果您我猜防火墙理论上可以阻止端口80上的非HTTP通信,但如果使用TLS,它不会知道它是HTTP,并且很少有情况下您不想使用TLS来保护连接的设备