首页/协议速查/MQTT
📨

MQTT 发布订阅

网络协议
物联网上云事实标准:轻量+发布订阅+QoS,几十KB内存即可跑。
🧩 核心原理
📈 时序 / 工作过程图
MQTT 发布订阅通信流程连接 → 订阅/发布 → 心跳保活客户端设备/传感器BrokerMQTT服务器CONNECTCONNACKSUBSCRIBESUBACKPUBLISHPUBACKPINGREQPINGRESPQoS:0最多一次 / 1至少一次(需ACK) / 2仅一次(四步握手) · 遗嘱消息:设备异常断开时自动广播
⚙️ 配置 / 使用要点
  1. 连接:clientId+用户名/密码(可选)+cleanSession
  2. 订阅主题:如 dev/001/temp (可通配符 +/-/#)
  3. 发布:QoS按需,retain按需
  4. 重连:MQTT自带重连+自动重订阅
🛠️ 项目示例
MQTT 连接+订阅+发布(Eclipse Paho 风格)
MQTTClient client;
Network n;
MQTTClient_connectOptions opts = MQTTClient_connectOptions_initializer;
NetworkInit(&n, net_connect);
MQTTClientInit(&client, &n, 1000, buf, 256, buf2, 256);

opts.keepAliveInterval = 60;        // 60s 保活
opts.cleansession = 1;
MQTTClient_connect(&client, &opts);

MQTTClient_subscribe(&client, "dev/001/cmd", QoS1);
MQTTClient_publish(&client, "dev/001/temp",
                   (char*)msg, strlen(msg), QoS1, 0);
// 收到 cmd 主题 → 执行控制指令
❓ 面试高频
MQTT为什么是IoT标配?
轻量(几百B)、发布订阅解耦、QoS分级、遗嘱离线通知、支持海量连接(服务器侧)
QoS0/1/2区别?
0不确认最快可能丢;1发一次等PUBACK可重复;2四次握手保证仅一次,开销最大
遗嘱消息什么时候发?
客户端非正常断开(网络断/掉电)时Broker代发遗嘱主题;正常断开(DISCONNECT)不发
✅ 自查清单 (点击勾选,本地保存)
0/0
知道发布订阅模型
知道主题通配符
知道QoS三级
知道遗嘱与保留消息
会MQTT连接配置