为什么在 WebSockets 而不是 WebSockets 上使用 MQTT?

Why use MQTT over WebSockets instead of WebSockets?

MQTT 是一种轻量级协议,具有低带宽和电池消耗。相反,Websockets 有很高的电池消耗。 但是如果我需要在 Websockets 上使用 MQTT,那么首先使用 Websockets 不是更好吗?

我正在设计一个需要实时数据的移动应用程序,我担心电池会耗尽。

通常,当您的应用程序在浏览器中 运行 时,您只需要在 web-sockets 上使用 MQTT(因为浏览器安全模型不允许直接 TCP 连接)。 web-socket 连接提供了一个可以传递 MQTT 数据包的隧道。

这意味着您的问题几乎等同于“只使用 TCP/IP 会不会更好,因为 MQTT 流量流经 TCP/IP 连接”。

参考the spec中对MQTT的描述:

MQTT is a Client Server publish/subscribe messaging transport protocol. It is light weight, open, simple, and designed so as to be easy to implement. These characteristics make it ideal for use in many situations, including constrained environments such as for communication in Machine to Machine (M2M) and Internet of Things (IoT) contexts where a small code footprint is required and/or network bandwidth is at a premium.

因此,如果您需要 pub/sub 协议来与您的移动应用程序通信,那么 MQTT 可能是一个不错的选择。如果您只需要点对点 link,那么直接使用 web-sockets(或 TCP)可能是更好的解决方案。最好的协议将取决于您的具体要求;但请记住,设计您自己的 pub/sub 协议可能需要大量工作!

在电池消耗方面,因为每个 use-case 都不一样;您很可能会想出一个自定义协议来满足您的特定需求并消耗更少的能量(但请记住实现它所需的努力)。请注意,所有这些都假设您的设备已经拥有完整的 TCP 网络堆栈; LoRaWAN, sigfox、NB-IoT、蓝牙等协议将比标准蜂窝连接消耗更少的能量(但每个都有不同的 pros/cons)。