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
相关文章
|
3月前
|
存储 SQL 定位技术
GIS开发:如何开发一个MBTiles Server
GIS开发:如何开发一个MBTiles Server
105 1
|
5月前
|
JSON 安全 API
实战指南:使用PHP构建高性能API接口服务端
构建RESTful API的简要指南:使用PHP和Laravel,先安装Laravel并配置数据库,接着在`api.php`中定义资源路由,创建`PostController`处理CRUD操作,定义`Post`模型与数据库交互。使用Postman测试API功能,如创建文章。别忘了关注安全性、错误处理和性能优化。
143 2
|
5月前
|
NoSQL 大数据 Redis
分享5款.NET开源免费的Redis客户端组件库
分享5款.NET开源免费的Redis客户端组件库
|
6月前
|
负载均衡 监控 网络协议
rpc简介
rpc的了解
63 6
EMQ
|
运维 网络协议 JavaScript
MQTT X CLI 正式发布:强大易用的 MQTT 5.0 命令行工具
下载桌面客户端、使用终端命令行或是在桌面浏览器上都可快速完成对 MQTT 的连接测试。
EMQ
336 0
MQTT X CLI 正式发布:强大易用的 MQTT 5.0 命令行工具
|
Cloud Native 前端开发 Go
探索 Golang 云原生游戏服务器开发,根据官方示例实战 Gorilla WebSocket 的用法
探索 Golang 云原生游戏服务器开发,根据官方示例实战 Gorilla WebSocket 的用法
694 0
|
测试技术 网络性能优化 PHP
simps/mqtt v1.1.2 版本发布,首个支持 MQTT v5.0 协议的 PHP library
在此版本中支持了 auth 类型和上个版本中未支持属性,这也意味着 MQTT v5.0 的协议已经支持完毕,后面的版本也就剩下 Bug 修复和代码优化了
347 0
【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 客户端开发 )
【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 客户端开发 )
206 0
|
存储 Java
【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器端开发 )
【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器端开发 )
176 0
|
运维 监控 JavaScript
基于开源Python MQTT Client连接阿里云IoT
前面介绍了基于开源JAVA MQTT Client连接阿里云IoT,这里面继续介绍如果使用Python MQTT Client连接阿里云IoT。
基于开源Python MQTT Client连接阿里云IoT