dev.to | 📄 原文链接 | 2026-10-29 收录

MQTT 里其实没有消息队列:两字节协议如何撑起物联网

来源:dev.to — 2026-10-28

📋 概述

1999 年两位工程师要给美国西南沙漠里绵延数百公里的输油管道做监控,唯一可用的是一条脆弱、按千字节计费的卫星链路,远端传感器只有 8 位单片机和极小的内存缓冲。用 HTTP 的话,光是重复的明文头部每天就要烧掉几千美元带宽,一周内耗尽电池。于是他们设计了 MQTT。文章的核心纠错是:MQTT 名字里带 MQ,却根本不是队列——消息投递到主题而不是队列,broker 收到 PUBLISH 时查内存里的订阅树,有几个人订阅就复制几份沿 TCP 连接发出去,一个订阅者都没有就直接丢弃。唯一例外是持久会话下为指定 ClientId 缓存未确认的 QoS 1/2 消息。它真正省电的原因是二进制线格式:固定头最小只要两字节。

🔑 核心要点

💡 金句

“If zero clients are subscribed, the broker discards the message immediately.”
译:如果一个订阅者都没有,broker 会立刻把这条消息丢弃。
← 返回 dev.to 首页