什么是MQTT?

Aug 25, 2024·
Sam.C
Sam.C
· 2 min read

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,专为低带宽、高延迟或不可靠的网络环境设计。它非常适合用于物联网(IoT)应用和移动应用中,这些场景往往要求高效的消息传递和低功耗的操作。

MQTT 的关键特点

  1. 轻量级和高效

    • MQTT 设计简洁,协议头部开销小,适合带宽受限的环境。
  2. 发布/订阅模式

    • 发布(Publish):客户端向一个主题(Topic)发布消息。
    • 订阅(Subscribe):客户端订阅一个或多个主题,接收这些主题的消息。
    • 消息(Message):在主题下发布的数据内容。
  3. 支持质量保证级别

    • QoS 0(At most once):消息最多发送一次,可能丢失,不会重发。
    • QoS 1(At least once):消息至少发送一次,可能重复发送。
    • QoS 2(Exactly once):消息只发送一次,确保消息的唯一性。
  4. 保持连接(Keep-alive)

    • MQTT 支持心跳机制,客户端和服务器定期交换心跳包,以确保连接保持活跃。
  5. 轻量化的消息格式

    • MQTT 消息的格式简洁,以最小的开销传递消息,这对于低功耗和低带宽的设备非常重要。
  6. 断开重连机制

    • MQTT 具有内置的重连机制,当连接中断时,会自动尝试重新连接。
  7. 持久会话

    • 支持会话持久化,即使在客户端断开时,服务器也可以保存客户端的订阅和消息状态。

典型使用场景

  1. 物联网(IoT)

    • 设备(如传感器、执行器)与中央系统进行数据交换,常见于智能家居、工业自动化等应用。
  2. 实时应用

    • 用于需要实时数据传输的应用,如聊天应用、在线游戏等。
  3. 低带宽和高延迟网络

    • 适用于网络条件不理想的场景,如远程地区的设备通信。

工作原理

  1. 连接

    • 客户端(如传感器或应用程序)连接到 MQTT 代理(Broker),代理负责接收、存储和转发消息。
  2. 订阅

    • 客户端订阅特定的主题,以便接收与该主题相关的消息。
  3. 发布

    • 客户端向一个或多个主题发布消息。
  4. 转发

    • 代理将消息从发布者转发到订阅了该主题的客户端。

示例

下面是一个简单的 MQTT 示例,使用 mqtt 库来创建一个客户端:

const mqtt = require("mqtt");
const client = mqtt.connect("mqtt://broker.hivemq.com");

client.on("connect", () => {
  console.log("Connected to MQTT broker");
  client.subscribe("test/topic", (err) => {
    if (!err) {
      client.publish("test/topic", "Hello MQTT");
    }
  });
});

client.on("message", (topic, message) => {
  // message is a Buffer
  console.log(`Received message: ${message.toString()} on topic: ${topic}`);
});

在这个示例中,客户端连接到公共的 MQTT 代理服务器,订阅了 test/topic 主题,并在收到消息时打印消息内容。