为什么 MQTT 协议优于 Websocket 或直接 TCP 套接字用于实时数据物联网?

物联网 MQTT
2021-06-16 16:15:44

我们知道 MQTT 是基于 TCP 的。

为什么我们不直接使用普通 TCP 连接来获取实时数据?最近我使用普通 TCP 进行实时/实时连接,通过互联网中的普通 TCP 连接将传感器数据传输到另一台设备。

我做的架构:

IoTBoard -> Server(VPS)-> ClientDevice(eg: smartphone)

这个架构看起来很像 MQTT:

Publisher -> Broker -> Subscriber

对于一个更新数据,我使用的格式数据在 IoT 板中的普通 TCP 中看起来像这样。

device_id(defined by programmer)|meta_data|sensorA_val|sensorB_val|etc

所以基本上它只是向服务器发送纯文本

所以我为每个主题使用管道分隔符。然后服务器在发送到客户端之前像过滤管道一样处理它。

另外我听说 websocket 也适用于实时数据,为什么它不比 MQTT 好?

你觉得我做的最好吗?

1个回答

什么是“最好的”取决于具体情况。但是,这里有以下优点:

  1. [TCP, Websocket, MQTT] 连接会话。有一个“连接”的概念,之后您可以以任何一种方式发送数据。
  2. [Websocket,MQTT] 框架。当你想发送多条消息时,你需要一种方法让接收者知道每条消息的结束位置。使用 TCP,您必须自己编写。
  3. [Websocket,MQTT] 安全性。使用 TCP,您必须构建自己的安全性或使用诸如 TLS(或 TCP 之上的 HTTPS)之类的东西。对于 websockets,这是标准的一部分。使用 MQTT,大多数提供商(AWS、Azure 等)都将安全性作为包的一部分提供。请注意,AWS 也允许通过 websockets 的 MQTT!
  4. [MQTT] pubSub:代替 1-1 连接,您可能希望能够从一个连接发送,但由多个/多个接收器接收,具体取决于主题。MQTT 允许将代理的概念作为标准的一部分。代理中有主题和路由的概念。有些甚至支持持久消息等。
  5. [MQTT] LastWillAndTestament:发布/订阅的另一项功能。查一下。并非所有 MQTT 实现都支持它。
  6. [MQTT] 易于实施:由于AWS、Azure等供应商提供物联网基础设施,实施起来非常容易。使用 TCP/Websocket,您必须设置服务器。从这个意义上说,HTTP 可能比普通的 TCP/Websocket 更容易。

你的用例是什么?