- 物联网
- 消息队列
- 后端
【免费下载链接】mosquitto
Eclipse Mosquitto - An open source MQTT broker
本文基于 Mosquitto 项目官方博客在 2010 年 10 月发布的一周年纪念帖(one-year-old.md),回顾这个开源 MQTT Broker 的诞生时刻与第一年的发展脉络,并逐条核对其在诞生一周年时设定的技术路线图——包括完整 MQTT 3.1 支持、IBM rsmb 功能对齐、IPv6、SSL 以及 1.0 版本目标——在仓库后续发布记录与源码中的实际兑现情况。读完本文,你将掌握 Mosquitto 早期版本演进的时间线、关键功能引入顺序,以及如何用当前仓库中的发布帖、ChangeLog.txt 与源码交叉验证项目历史。
一、诞生时刻:2009 年 10 月 25 日的第一个提交
原帖记录了 Mosquitto 项目一个精确到秒的起点:2009 年 10 月 25 日 21:40:51,作者(Roger Light)在 oggcamp 活动结束后仅 5 小时 40 分钟,向日后成为 Mosquitto 源码仓库的代码库提交了第一个 commit。虽然当天提交的还只是仓库骨架,真正意义上的代码直到次日才落地,首个正式 release 更是等到近六周之后,但作者明确将这一刻视为项目的"诞生"。
从这个时间点向后看,当前仓库的 ChangeLog.txt 以2.1.0 - 2021-xx-xx(开发版)为开头,向后持续记录了十余年的变更,印证了这条始于 2009 年秋的代码线至今仍在演进。一周年帖中的时间线可以归纳为:
| 事件 | 时间 | 说明 |
|---|---|---|
| 第一个 commit | 2009-10-25 21:40:51 | oggcamp 结束后 5 小时 40 分钟 |
| 首个代码提交 | 2009-10-26 前后 | "no code committed until the next day" |
| 首个 release | 约 2009-12 月初 | 第一个 commit 之后近六周 |
| 项目一周年 | 2010-10-25 | 原帖撰写时间 |
二、第一年:从 0.5 到 0.9 的关键里程碑
一周年时 Mosquitto 尚未发布 0.9,但第一年已经走完了从 0.1 到 0.8 的密集迭代。仓库中的 www/posts 目录保留了当年的发布记录,可以还原这条演进主线:
- 0.5 / 0.5.1(2010-03-01):见 version-0-5-1-released.md。新增
mosquitto_sub与mosquitto_pub两个简单命令行客户端;持久化行为改为"数据常驻内存、退出时与按autosave_interval周期写盘",降低闪存写入次数,更适合嵌入式设备;msg_timeout选项更名为retry_interval以贴近 rsmb 兼容性;新增SIGUSR1信号强制写盘。 - 0.6(2010-05-05):见 version-0-6-released.md。首次提供多 broker 互联(bridging)的基础支持;数据库改为"每条消息仅存一份、按订阅引用",取代"每个订阅客户端各存一份"的低效设计;实现
max_inflight_messages与max_queued_messages;mosquitto_sub支持多主题订阅,mosquitto_pub支持从文件/stdin 发送消息。 - 0.8(2010-08-08):见 version-0-8-released.md。这是"库版本",发布 MQTT 客户端 C 库 libmosquitto,以及绑定其上的 C++ 与 Python 库,
mosquitto_pub/mosquitto_sub也改为基于该库实现;新增 CMake 构建脚本,使库与客户端可在 Windows 原生编译。 - 0.9(2010-11-15):见 version-0-9-released.md。作者原计划在一周年当天(10 月 25 日)发布 0.9 却未能如愿,实际在三周后落地。这一版移除 sqlite 及 pcre/sqlite3-pcre 依赖,改用自定义的内存存储与持久化格式;同时带来 MQTT v3.1 支持、IPv6 支持与客户端用户名/密码认证。
从仓库源码看,这条演进路径的底层设计至今仍有延续:例如 src/ 中mosquitto_broker_internal.h与 persist.h 对应的自定义持久化格式,正是 0.9 起脱离 sqlite 的产物。
三、一周年时设定的技术路线图
原帖在一周年节点上明确列出了下一年的目标,这是本篇文档最具技术实质的部分,逐条继承如下:
- 在下一年此时(2011 年 10 月)之前发布 1.0;
- 完整的 MQTT 3.1 支持;
- 完整的 rsmb 功能集(除不合适的部分外)——rsmb 即 IBM Really Small Message Broker,Mosquitto 从诞生起就以"可无缝替换 rsmb"为目标;
- IPv6 支持;
- SSL 支持;
- 程序与 man 页面的语言翻译;
- 完整的 API 文档与示例。
作者还在帖末向社区征集最期待的功能,足见这一路线图并非封闭规划,而是开放式的社区驱动演进。
四、路线图的兑现:仓库里的证据
用当前仓库中的发布记录与源码逐条核对,可以看到大部分目标都得到了兑现,且留下了可验证的痕迹。
MQTT 3.1 与 IPv6:在 0.9 中落地
一周年后三周发布的 0.9 版 直接兑现了前两项:broker 完整兼容 MQTT v3.1,客户端库与命令行工具提供 v3.1 的 username/password 认证;同时"为 rsmb 提供 IPv6 所不具备的能力"——IPv6 支持成为 Mosquitto 超越 rsmb 的起点。IPv6 在今天的源码中仍是常态能力,例如 src/net.c 中通过getaddrinfo()与AF_INET6/AF_UNSPEC完成地址解析与监听(见其中hints.ai_family = listener->socket_domain与AF_UNSPEC分支),并使用inet_ntop(AF_INET6, ...)输出地址,说明双栈监听逻辑已深度内建。
从 rsmb 替代品到超越 rsmb
"rsmb 功能集对齐"是贯穿早期版本的核心工程约束,并在多个 release 帖中反复出现:0.5 将msg_timeout更名为retry_interval以贴近 rsmb 兼容性;0.6 在persistence_location保持 rsmb 兼容的同时新增persistence_file;0.8 将/开头的主题视为与普通主题不同("matches the behaviour of rsmb")、address/addresses配置变量对齐;0.9 调整port配置行为以匹配 rsmb,并将$SYS/broker/heap/current size等消息格式对齐 rsmb。到 两周年帖 two.md 时,作者已称项目"接近 rsmb 功能完备";而 1.0 的定位则是"完整 rsmb 功能集(除少数冷门项外)",同时凭借 IPv6、SSL 等能力实现了对 rsmb 的超越。
SSL:在 1.0 中兑现
SSL 目标最终在 1.0 兑现。version-1-0-released.md 记录了 broker、客户端库与 pub/sub 客户端全面获得 SSL/TLS 支持(证书双向认证),并额外提供 TLS-PSK 预共享密钥加密,面向嵌入式受限设备。当前仓库中 lib/tls_mosq.c 与 tls_mosq.h 实现了客户端侧的 TLS 状态机与证书校验逻辑,mosquitto.conf 与 man/mosquitto.conf.5.xml 则收录了cafile、certfile、keyfile、psk_file等一整套 TLS 配置项。
1.0 发布:目标兑现,但比"下一年"晚了十个月
1.0 实际于 2012 年 8 月 14 日发布,比一周年帖中"下一年此时"的设想晚了约十个月。发布帖称该版本囊括了项目总提交数的 20% 以上,新增了批量测试与大量 man 页面,客户端库 API 也做了大规模改进(也因此与旧版不兼容)。这提醒我们:路线图中的时间节点是愿景,而工程的完成度才是版本发布真正的前提。
API 文档与示例:持续积累的证据
"完整 API 文档与示例"目标在仓库中有大量实物:libmosquitto的公共接口集中在 include/mosquitto.h,man/ 目录收录了libmosquitto.3.xml、mosquitto_pub.1.xml、mosquitto_sub.1.xml、mosquitto.conf.5.xml、mosquitto.8.xml等成套 man 页面;examples/ 提供 publish、subscribe、temperature_conversion 等可直接编译的 C/C++ 示例;test/ 目录则积累了数百个 Python/C 集成与单元测试(如test/broker/03-publish-qos1.py、test/lib下的库测试),用于验证文档所承诺的行为。
语言翻译:未明显落实的目标
至于"程序与 man 页面的语言翻译"目标,从当前仓库证据看落实有限:man/ 下的页面仍以英文编写,ChangeLog.txt也全部为英文。这一项属于原帖中如实列出、但仓库内缺少兑现痕迹的目标,可作为项目路线图执行情况的真实样本。
五、结语:一周年只是起点
一周年帖的结尾语气轻松而务实——"希望 0.9 尽快发布、明年此时之前有 1.0"。回看仓库记录,0.9 在三周后落地,两周年帖 记录了从 0.8.3 到 0.13 的跨越以及 Debian/Ubuntu 打包、Windows 原生移植等新进展,1.0 则在 2012 年 8 月到来。今天打开仓库,src/、lib/、plugins/(dynamic-security、persist-sqlite 等)、test/ 与 www/posts 中两百余篇博客构成了从 2009 年那个 21:40:51 的提交一路走来的完整史料。对于研究者与开发者而言,这篇一周年帖加上仓库中可交叉验证的发布记录与源码,正是一条理解 Mosquitto 早期架构决策(内存存储、rsmb 兼容约束、IPv6/SSL 内建)的高密度线索链。
- 物联网
- 消息队列
- 后端
【免费下载链接】mosquitto
Eclipse Mosquitto - An open source MQTT broker
相关推荐
Dragonfly版本演进:从v0.4.x到v1.0.x的技术路线图分析
Dragonfly版本演进:从v0.4.x到v1.0.x的技术路线图分析 Dragonfly作为一款高性能的P2P内容分发系统,在版本演进过程中实现了从基础架构
云原生Eclipse Mosquitto 项目两周年回顾:从 0.8.3 到 0.13 的架构演进与 1.0 路线图
Eclipse Mosquitto 项目两周年回顾:从 0.8.3 到 0.13 的架构演进与 1.0 路线图 Mosquitto 作为一款开源 MQTT Br
后端消息队列消息路由Rustls 十年:从 2016 年首个提交到 0.24 的架构演进技术全览
Rustls 十年:从 2016 年首个提交到 0.24 的架构演进技术全览 本文以官方博客《A Decade of Rustls》为骨架,结合当前仓库源码,系
网络安全密码学网络
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考