什么是MQTT?
Aug 25, 2024··
2 min read
Sam.C
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,专为低带宽、高延迟或不可靠的网络环境设计。它非常适合用于物联网(IoT)应用和移动应用中,这些场景往往要求高效的消息传递和低功耗的操作。
MQTT 的关键特点
轻量级和高效:
- MQTT 设计简洁,协议头部开销小,适合带宽受限的环境。
发布/订阅模式:
- 发布(Publish):客户端向一个主题(Topic)发布消息。
- 订阅(Subscribe):客户端订阅一个或多个主题,接收这些主题的消息。
- 消息(Message):在主题下发布的数据内容。
支持质量保证级别:
- QoS 0(At most once):消息最多发送一次,可能丢失,不会重发。
- QoS 1(At least once):消息至少发送一次,可能重复发送。
- QoS 2(Exactly once):消息只发送一次,确保消息的唯一性。
保持连接(Keep-alive):
- MQTT 支持心跳机制,客户端和服务器定期交换心跳包,以确保连接保持活跃。
轻量化的消息格式:
- MQTT 消息的格式简洁,以最小的开销传递消息,这对于低功耗和低带宽的设备非常重要。
断开重连机制:
- MQTT 具有内置的重连机制,当连接中断时,会自动尝试重新连接。
持久会话:
- 支持会话持久化,即使在客户端断开时,服务器也可以保存客户端的订阅和消息状态。
典型使用场景
物联网(IoT):
- 设备(如传感器、执行器)与中央系统进行数据交换,常见于智能家居、工业自动化等应用。
实时应用:
- 用于需要实时数据传输的应用,如聊天应用、在线游戏等。
低带宽和高延迟网络:
- 适用于网络条件不理想的场景,如远程地区的设备通信。
工作原理
连接:
- 客户端(如传感器或应用程序)连接到 MQTT 代理(Broker),代理负责接收、存储和转发消息。
订阅:
- 客户端订阅特定的主题,以便接收与该主题相关的消息。
发布:
- 客户端向一个或多个主题发布消息。
转发:
- 代理将消息从发布者转发到订阅了该主题的客户端。
示例
下面是一个简单的 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
主题,并在收到消息时打印消息内容。