Skip to content

先搞懂它是什么

  • MQTT(消息队列遥测传输):物联网最常用的“公告板”协议——设备往主题(Topic)上“贴消息”,订阅该主题的人就能看到。
  • 发布/订阅模型:发布者与订阅者互不认识,中间靠** Broker(代理)**转发,天然适合设备上报与控制。
  • 基于 TCP:默认跑在 TCP 1883 端口,MQTTS 是加密版(8883)。

层层拆解原理

1. 角色与主题

  • 主题(Topic):消息的“频道名”,用 / 分层,如 home/room1/temp
  • 通配符+ 匹配一层(temp/+),# 匹配多层(temp/#)。

2. 连接与报文流程

3. QoS:消息可靠等级

QoS语义确认机制适用
0最多一次无确认,可能丢实时传感器数据(可容忍丢)
1至少一次PUBACK 确认,可能重复一般控制指令
2恰好一次四次握手,不丢不重重要命令(计费、开关)

4. 保活、遗嘱与保留消息

  • 保活(Keep Alive):客户端定时发心跳,Broker 超时未收到则判定掉线。
  • 遗嘱(LWT):客户端可预先登记“我掉线时替我发布的主题消息”,用于设备在线状态监测。
  • 保留消息(Retained):Broker 记住主题的最后一条消息,新订阅者立刻收到。

结合 SDK 看实现

SDK 的 MQTT 例程流程:连 Wi-Fi → 建立 TCP → MQTT 连接(CONNECT)→ 订阅主题 → 循环收发:

c
/* 例程中 MQTT 连接的基本参数:服务器地址、端口、客户端 ID */
/* 连接建立后,向主题发布数据用发布接口,收到订阅消息走回调处理 */
mqtt_connect(server, port, client_id, username, password);  /* 流程示意 */
mqtt_subscribe("home/room1/temp", qos);
mqtt_publish("home/room1/temp", data, qos);

发布/订阅的回调模型让“设备上报 + 手机控制”落地为同一套代码。

常见考点 / 面试题

MQTT 和 HTTP 有什么区别?

MQTT 是发布/订阅的“长连接 + 推送”,适合低带宽、弱网、大量设备的 IoT 场景;HTTP 是一问一答的请求/响应,适合一次性的资源获取。

QoS 0/1/2 怎么选?

能容忍少量丢失选 0(传感器高频数据);要保证送达选 1(一般指令);既不丢也不重选 2(关键指令),但开销最大。

什么是遗嘱消息?

客户端连接时登记 LWT,异常掉线时由 Broker 代发该消息,让其他设备感知“它下线了”,常用于在线状态监控。

Broker 在 MQTT 里起什么作用?

Broker 负责接收发布、按主题转发给订阅者、维护连接状态;发布者和订阅者不直接通信,解耦了设备与设备。

设备怎么保持“在线”状态?

靠保活心跳(PINGREQ/PINGRESP)与遗嘱配合:心跳证明在线,遗嘱在超时掉线时通告离线,云平台据此刷新设备状态。

遇到问题?

如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

Released under the MIT License. Build Time 2026-09-11 14:52:23