FreeMQTT:一款Python语言实现的开源MQTT Server

简介: FreeMQTT 是一款用 Python 语言并基于 Tornado 开发的开源 MQTT 服务器,支持 MQTT3.1.1 和 MQTT5.0 协议,提供多租户安全隔离、高效 Topic 匹配算法及实时上下线通知等功能,适用于 IoT 场景。快速启动仅需克隆仓库、安装依赖并运行服务。

FreeMQTT 简介

FreeMQTT 是用 Python 编程语言并基于 Tornado Web 框架开发的 一款MQTT服务器开源软件。

特色

多种传输层协议支持
  • MQTT3.1.1 和 MQTT5.0
  • MQTT over TCP
  • MQTT over Websocket
  • TLS / SSL
独特的应用隔离安全机制(多租)
  • FreeMQTT 把每个接入的 MQTT 客户端划归为一个独立的 App
  • 通过 freemqtt_token 命令为每个App生成令牌Token(可生成多个)
  • 令牌 Token 含有 App ID 并用秘钥 secret 进行了加密签名
  • MQTT 客户端连接 FreeMQTT 时将令牌 Token 做口令 password 传入 connect 方法
  • FreeMQTT 在接收到 CONNECT 消息时,通过解密,验证签名来进行鉴权
  • 如果 FreeMQTT 鉴权成功,则会从令牌Token得到MQTT客户所属的App ID
  • 不同的App之间,MQTT客户是相互独立的,例如 App A 有个客户A, App B 有个客户B,则客户A与客户B可以具有相同的客户ID
  • 每个App相当于一个虚拟的MQTT Server
  • 不同的App之间消息隔离,互不干扰
独特的存储管理与订阅匹配算法
  • 独特的存储管理架构
  • 独特Topic和订阅Topic Filter匹配算法,匹配时间复杂度为 O(1)
  • 在Topic级数固定的情形下,主题Topic匹配速度是有界的常数
  • 匹配时间不会随着客户端订阅的主题增加而增加
定期发布统计信息
  • 定期通过系统主题 $SYS/METRICS 发布每个Application统计信息
  • 在线客户数、收发消息总数、普通订阅主题数、共享订阅主题数、retain 消息数、服务器持续运行时间
独有的MQTT客户端上线下线通知机制
  • 通过系统主题 $SYS/ONLINE 实时通知客户上线
  • 通过系统主题 $SYS/OFFLINE 实时通知客户下线
  • 避免了传统的需要客户端设置的医嘱消息才能得到离线的通知,且不能得到上线通知
支持MQTT3.1.1和MQTT5.0 客户互通共存
  • 可以同时接受MQTT3.1.1 \& MQTT5.0的客户接入
  • MQTT3.1.1和MQTT5.0客户之间可以互通消息

快速上手

运行环境

Python3.9+

克隆源码
$ git clone https://github.com/chenglinning/freemqtt.git
AI 代码解读

$ git clone https://gitee.com/ningchenglin/freemqtt
AI 代码解读
进入freemqtt 路径
$ cd ./freemqtt
AI 代码解读
安装依赖包
$ python -m pip install -r requirements.txt
AI 代码解读
运行
$ python ./freemqttd.py
[I 240921 16:54:11 freemqttd:91] freemqttd started
AI 代码解读
生成客户端密码(Token)
$ ./freemqtt_token myapp2

AppID: myapp2
Token: gVRVsBqw3bQSD4CQ4rFOXtfGQMelHJmEaNlYtH7GS/A=
AI 代码解读
使用 mqttx客户端工具 进行测试
  • 输入连接参数

alt 填入连接设置

  • 连接FreeMQTT

alt 填入连接设置

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
打赏
0
0
0
0
64
分享
相关文章
FreeMQTT Plus: 一个新型 MQTT Broker 集群的实现
FreeMQTT Plus 是一款基于 MQTT 协议的高性能消息中间件,采用分布式架构解决单点瓶颈问题。其核心由 Nginx 负载均衡器、黑(A)节点(MQTT Broker)、白(B)节点(消息路由)和日志(L)节点组成。通过无主从设计,支持高可用性、负载均衡与灵活扩展。针对会话同步、消息路由等挑战,FreeMQTT Plus 利用 MQTT5 特性定义元命令,实现节点间高效通信,无需依赖第三方组件。适用于物联网海量设备接入与高并发场景,为未来边缘计算和多级集群部署提供坚实基础。
434 74
商业版vs开源版:一图看懂云消息队列 RocketMQ 版核心优势
自建开源 RocketMQ 集群,为保证业务稳定性,往往需要按照业务请求的峰值去配置集群资源。云消息队列 RocketMQ 版 Serverless 实例通过资源快速伸缩,实现资源使用量与实际业务负载贴近,并按实际使用量计费,有效降低企业的运维压力和使用成本。
333 17
我的开源项目达成1000 star里程碑!python-office招募开源小伙伴
大家好,这里是程序员晚枫。我的首个开源项目 **python-office** 在GitHub上达到了1000星!该项目始于2022年初,旨在帮助更多人快速入门Python。历经多个里程碑,包括被开源中国推荐、发布官网和操作视频等。目前下载量已达26万+,并被评为GitCode毕业项目。未来计划包括统一代码风格、增加功能、完善文档和单元测试,以及招募开源小伙伴共同维护。欢迎感兴趣的朋友私信我:**开源**。 ![Stargazers over time](https://starchart.cc/CoderWanFeng/python-office.svg)
49 11
我的开源项目达成1000 star里程碑!python-office招募开源小伙伴
恭喜 Apache RocketMQ 荣获 2024 开源创新榜单“年度开源项目”
恭喜 Apache RocketMQ 荣获 2024 开源创新榜单“年度开源项目”
恭喜 Apache RocketMQ、Apache Seata 荣获 2024 开源创新榜单“年度开源项目”
近日,以“新纪天工、开物焕彩——致敬开源的力量”为活动主题的“重大科技成就发布会(首场)”在国家科技传播中心成功举办,并隆重揭晓了 2024 开源创新榜单,旨在致敬中国开源力量,传播推广开源科技成就,营造中国开源创新生态。2024 年开源创新榜单由中国科协科学技术传播中心、中国计算机学会、中国通信学会、中国科学院软件研究所共同主办,中国开发者社区承办,以王怀民院士为首组建评审委员会,进行研讨评审,面向中国开源行业领域,遴选具有创新性、贡献度和影响力的开源项目、社区、应用场景与开源事件。在评审出的 10 个年度开源项目中,Apache RocketMQ、Apache Seata 成功入选。
119 15
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
311 9
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
308 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
一图看懂云消息队列 RabbitMQ 版对比开源优势
一张图带您快速了解云消息队列 RabbitMQ 版对比开源版本的显著优势。
115 12
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
161 3
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等