如果您打算直接从 webapps(在页面中)发布/订阅消息,则只需要在 websockets 上运行 MQTT。
基本上我会为所有东西运行纯 MQTT,只有在你真正需要时才添加 websocket。
对于所有非浏览器语言,MQTT 客户端库仅使用本机 MQTT。对于 Javascript,有一个纯 MQTT 库和使用 websockets 的页面库中的 Paho。
编辑:防火墙隧道用例是在 websockets 上使用 MQTT 的正当理由,并且由于编写此答案,更多的无 web/JavaScript 客户端库增加了支持
在 Websockets 上使用 MQTT 的两个主要原因(这实际上意味着通过 HTTP/HTTPS):
Web 应用程序(在浏览器中运行的应用程序 - 例如用 JavaScript 编写的)
任何其他不想使用 1883/8883 端口而想通过 HTTP/HTTPS 的应用程序 - 这可能是为了减少被防火墙阻止的机会(例如在公司网络中),因为大多数防火墙都会让 HTTP 流量通过
如果您不需要或担心上述情况,请使用“直接”MQTT:
它更有效
还有更多适用于“直接”MQTT 的各种语言的客户端库
MQTT 是一个支持以下协议的协议:
提供发布/订阅机制
服务质量政策
通信开销最小
专为窄带通信通道和受限设备而设计。
根据设备,有一个可用的实现。
浏览器:它使用 websockets。 Websocket 为浏览器提供了建立全双工通信的能力。有实现 MQTT 功能的 Javascript 库,请参阅 Eclipse Paho JavaScript Client
Android : 他们是一个用 Java 编写的 MQTT 客户端库,用于在 Android 上开发应用程序。请参阅Eclipse Paho Android Service
因此,这取决于将要使用此功能的设备。有关标准和规范,请访问 MQTT Version 5.0
希望这会有所帮助。
干杯!
如果应用程序在仅允许 443 和 80 流量的防火墙后面运行,则基于 Web 套接字的 MQTT 也很有帮助。而且,您无法控制防火墙的策略。
MQTT 代理:
MQTT 客户端的对应物是 MQTT 代理。代理是任何发布/订阅协议的核心。根据实现的不同,代理可以处理多达数千个同时连接的 MQTT 客户端。
MQTT 客户端:当我们谈论客户端时,我们几乎总是指 MQTT 客户端。发布者和订阅者都是 MQTT 客户端。发布者和订阅者标签是指客户端当前是发布消息还是订阅消息(发布和订阅功能也可以在同一个 MQTT 客户端中实现)。
WebSocket:我们在 MQTT Essentials 中了解到,MQTT 非常适合受限设备和不可靠的网络。它也非常适合以非常低的开销发送消息。直接在手机浏览器中或者一般情况下发送和接收 MQTT 消息会很不错。这可以通过 MQTT over WebSockets 实现。
您可以使用第三方协议。泛美卫生组织、EMQTT、VerneMQ。