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

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

AppID: myapp2
Token: gVRVsBqw3bQSD4CQ4rFOXtfGQMelHJmEaNlYtH7GS/A=
使用 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
相关文章
|
1月前
|
消息中间件 运维 Serverless
商业版vs开源版:一图看懂云消息队列 RocketMQ 版核心优势
自建开源 RocketMQ 集群,为保证业务稳定性,往往需要按照业务请求的峰值去配置集群资源。云消息队列 RocketMQ 版 Serverless 实例通过资源快速伸缩,实现资源使用量与实际业务负载贴近,并按实际使用量计费,有效降低企业的运维压力和使用成本。
108 10
|
4月前
|
消息中间件 存储 缓存
Python之RabbitMQ操作
Python之RabbitMQ操作
|
27天前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
106 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
1月前
|
消息中间件 弹性计算 运维
一图看懂云消息队列 RabbitMQ 版对比开源优势
一张图带您快速了解云消息队列 RabbitMQ 版对比开源版本的显著优势。
|
1月前
|
机器学习/深度学习 算法 编译器
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
83 3
|
3月前
|
Linux Android开发 iOS开发
开源的Python库,用于开发多点触控应用程序
Kivy是一款开源Python库,专为开发多点触控应用设计,支持Android、iOS、Linux、OS X和Windows等平台。本文将指导你使用Kivy创建“Hello World”应用并打包成Android APK。首先通过`pip install kivy`安装Kivy,然后创建并运行一个简单的Python脚本。接着,安装Buildozer并通过`buildozer init`生成配置文件,修改相关设置后,运行`buildozer -v android debug`命令打包应用。完成构建后,你将在`./bin/`目录下找到类似`your-app-debug.apk`的文件。
89 2
|
4月前
|
存储 Python 容器
python中的h5py开源库的使用
python中的h5py开源库的使用
34 1
|
4月前
|
算法 数据处理 数据安全/隐私保护
|
5月前
|
消息中间件 新零售 弹性计算
云消息队列 RabbitMQ 版入门训练营,解锁对比开源优势与零基础实战
欢迎加入「云消息队列 RabbitMQ 版入门训练营」。
176 15
|
4月前
|
消息中间件 监控 调度
Celery与RabbitMQ的结合【Python】
【8月更文挑战第18天】 Celery与RabbitMQ结合是构建高效Python分布式系统的利器。Celery作为分布式任务队列,支持任务调度与结果管理;RabbitMQ则确保了消息的可靠传递。二者联用不仅提升了系统的异步处理能力,还增强了其扩展性与可靠性。通过简单的安装与配置,即可实现任务的异步执行与调度,同时利用监控工具优化性能并确保安全性。这种组合适用于需要处理大量异步任务的应用场景,极大地简化了分布式系统的设计与实现。