Ⓜ️MQTT
约 593 字大约 2 分钟
MQTTEMQX
2025-04-30
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,专为低带宽、高延迟或不稳定网络设计,广泛用于 IoT 场景。
核心特点
- 轻量高效:协议开销小,适合资源受限设备
- 发布/订阅模型:解耦生产者与消费者,支持一对多通信
- QoS 机制:三种服务质量级别,保障消息可靠性
- Topic 路由:层次化主题结构,灵活可扩展
工作原理
| 组件 | 说明 |
|---|---|
| Broker | 消息中转站,负责接收、过滤和分发 |
| Publisher | 发布消息到指定 Topic |
| Subscriber | 订阅 Topic 接收消息 |
| Topic | 消息路由标识(如 home/temperature) |
QoS 级别
| 级别 | 语义 | 适用场景 |
|---|---|---|
| QoS 0 | 最多一次,可能丢失 | 日志、实时传感器数据 |
| QoS 1 | 至少一次,可能重复 | 通知、状态更新 |
| QoS 2 | 恰好一次 | 金融交易、关键指令 |
Topic 通配符
+:单层匹配,home/+/temperature匹配home/kitchen/temperature#:多层匹配,home/#匹配home/bedroom/light/status
提示
Topic 区分大小写,避免前导 / 或空格。
消息结构

固定头部

| 字段 | 说明 |
|---|---|
| 报文类型 | 4 bit,无符号整数 |
| 标识位 | 4 bit,PUBLISH 报文专用:DUP / QoS / Retain |
| 剩余长度 | 可变报头 + 有效载荷的字节数 |


可变报头
内容取决于报文类型:
- CONNECT:协议名、协议级别、连接标识、Keep Alive、属性
- PUBLISH:主题名、报文标识符、属性

属性(MQTT 5.0):可选字段,由属性长度 + 属性列表组成。

有效载荷
- PUBLISH:承载应用消息内容
- SUBSCRIBE:订阅主题及选项
客户端示例
import Paho from "paho-mqtt";
const client = new Paho.Client(
"broker.example.com",
8083,
"clientId-" + Math.random().toString(16)
);
client.onMessageArrived = (message) => {
console.log(`收到消息: ${message.payloadString}`);
};
client.connect({
onSuccess: () => {
client.subscribe("home/temperature");
const message = new Paho.Message("25.5°C");
message.destinationName = "home/temperature";
client.send(message);
},
});注意
生产环境建议启用 TLS/SSL 加密及用户名密码认证。
