基于 WebSocket 的直接 MQTT 与 MQTT 的比较

与直接 MQTT 相比,< strong > WebSocket 上的 MQTT 的优点是什么?

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

52048 次浏览

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

基本上,我会为所有事情运行纯 MQTT,并且只在您确实需要的时候添加 websocket。

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

编辑: 防火墙隧道用例是在 websockets 上使用 MQTT 的一个有效理由,并且自从编写这个答案以来,更多的无 web/JavaScript 客户端库已经添加了支持

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

可以在 给你中找到关于通过 websockets 实现 MQTT 的功能的一个很好的总结。

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

  • Web 应用程序(在浏览器中运行的应用程序,例如用 JavaScript 编写的应用程序)
  • 任何其他不想使用1883/8883端口而想通过 HTTP/HTTPS 的应用程序——这可以减少被防火墙阻塞的机会(例如在公司网络中) ,因为大多数防火墙会让 HTTP 流量通过

如果您不需要或不担心以上问题,请使用“ direct”MQTT:

  • 更有效率
  • 使用“直接”MQTT 的各种语言有更多的客户端库

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

  • 提供发布/订阅机制
  • 服务质素政策
  • 尽量减少通信开销
  • 专为窄带通信信道设计
    约束装置。

根据设备的不同,有一个可用的实现。

浏览器: 它使用 websockets。Websocket 为浏览器提供了建立完全双工通信的能力。有一个用于实现 MQTT 功能的 Javascript 库,请参见 Eclipse Paho JavaScript 客户端

Android: 它们是用 Java 编写的用于在 Android 上开发应用程序的 MQTT 客户端库

所以它取决于使用这个功能的设备。有关标准和规格请访问 MQTT Version 5.0

希望这个能帮上忙。

干杯!

如果应用程序运行在只允许443和80流量的防火墙之后,则 Web 套接字上的 MQTT 也很有帮助。而且,您无法控制防火墙的策略。

MQTT 经纪人:

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

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

WebSocket: 我们在 MQTT 要点中了解到,MQTT 对于受限设备和不可靠网络是理想的。它也非常适合以非常低的开销发送消息。直接在移动电话的浏览器中或通常情况下发送和接收 MQTT 消息是非常好的。通过 WebSocket 的 MQTT 可以做到这一点。

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