【Python】Flask + MQTT 实现消息订阅发布

目录

  • Flask + MQTT 实现消息订阅发布
    • 准备
    • 开始
      • 1.创建Flask项目
      • 2创建py文件:`mqtt_demo.py`
      • 3.代码实现
      • 4.项目运行
    • 测试
      • 1、测试消息接收
      • 2、 测试消息发布
    • 扩展

Flask + MQTT 实现消息订阅发布

准备

  • 本次项目主要使用到的库:flask_mqtt
pip install flask_mqtt

开始

1.创建Flask项目

2创建py文件:mqtt_demo.py

- *也可以直接在项目中的 `app.py` 文件进行代码编写*

在这里插入图片描述

3.代码实现

from flask import Flask, request, jsonify
from flask_mqtt import Mqttapp = Flask(__name__)# 代理地址
app.config['MQTT_BROKER_URL'] = 'broker.emqx.io'
# 端口
app.config['MQTT_BROKER_PORT'] = 1883
# 当需要验证用户名和密码时,请设置该项
app.config['MQTT_USERNAME'] = 'user'
# 当需要验证用户名和密码时,请设置该项
app.config['MQTT_PASSWORD'] = '123456'
# 设置心跳时间,单位为秒
app.config['MQTT_KEEPALIVE'] = 60
# 如果服务器支持 TLS,则设置为 True
app.config['MQTT_TLS_ENABLED'] = False
# 主题
topic = '/flask/mqtt'
# 实例化
mqtt_client = Mqtt(app)@app.route('/')
def index():# 初始路由return "Welcome mqtt_flask"@mqtt_client.on_connect()
def handle_connect(client, userdata, flags, rc):"""连接回调函数"""if rc == 0:print('Connected successfully')# 订阅主题mqtt_client.subscribe(topic)else:# 连接失败print('Bad connection. Code:', rc)@mqtt_client.on_message()
def handle_mqtt_message(client, userdata, message):""" 消息回调函数 """# 定义接受到的消息data = dict(# 主题topic=message.topic,# 内容payload=message.payload.decode())# 打印输出接收到的消息print('Received message on topic: {topic} with payload: {payload}'.format(**data))@app.route('/publish', methods=['POST'])
def publish_message():""" 消息发布接口(实际应用中,该接口可能需要处理一些复杂业务逻辑) """# 格式化数据request_data = request.get_json()# 发布消息publish_result = mqtt_client.publish(request_data['topic'], request_data['msg'])return jsonify({'code': publish_result[0]})if __name__ == '__main__':app.run()

4.项目运行

  • 运行项目前可在Pycharm中设置hostport
    在这里插入图片描述
  • 设置好后直接运行项目

测试

使用MQTTX进行消息测试

1、测试消息接收

  • 创建连接

    • Host:为代码中定义好的 broker.emqx.io
    • Port:为代码中定义好的 1883
    • 用户名、密码根据需要添加
      在这里插入图片描述
  • 添加订阅

    • 主题为:/flask/mqtt
      在这里插入图片描述
  • MQTTX中发布消息

    • 主题:/flask/mqtt
      在这里插入图片描述
  • Flask控制台中接收到的消息
    在这里插入图片描述

2、 测试消息发布

  • 订阅使用消息接收的订阅
    • 主题为:/flask/mqtt
  • 使用Postman调用 /publish 接口,并发送消息到 /flask/mqtt 主题中
    在这里插入图片描述
  • MQTTX 中接收到的消息
    在这里插入图片描述

扩展

本次Flask项目在Win10下运行, MQTTX消息消息发送订阅在Ubuntu下进行

  • 内网穿透
    • 使用花生壳进行内网映射
    • 内网地址及端口为:Flask项目所在主机IP,端口为Flask运行端口
    • 使用协议:HTTPS

参考:

  • 链接: https://www.emqx.com/zh/blog/how-to-use-mqtt-in-flask
  • 链接: https://blog.csdn.net/emqx_broker/article/details/124816126

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/218207.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniGUI for Delphi UniSweetAlert控件详解

UniSweetAlert是UniGUI后期版本新增的一个界面友好的消息提示和输入控件,是ShowMessageN的升级版,UniSweetAlert增加了更多的可控制属性。 属性介绍 1、AlertType:提示类型,分为atError、atSuccess、atInfo、atQuestion、atWarni…

计算机网络快速刷题

自用//奈奎斯特定理和香农定理计算题 参考博客:UDP协议是什么?作用是什么? 肝了,整理了8张图详解ARP原理 【网络协议详解】——FTP系统协议(学习笔记) 在OSI参考模型中&am…

RS®SMM100A 矢量信号发生器具备毫米波测试功能的中档矢量信号发生器

R&SSMM100A 矢量信号发生器 具备毫米波测试功能的中档矢量信号发生器 R&SSMM100A 矢量信号发生器在 100 kHz 至 44 GHz 的频率范围内提供优越的射频特性。这款仪器覆盖现有无线标准所使用的 6 GHz 以下的频段、新定义的最高 7.125 GHz 的 5G NR FR1 和 Wi-Fi 6E 频段以…

Nginx(四层+七层代理)+Tomcat实现负载均衡、动静分离

一、Tomcat多实例部署 具体步骤请看我之前的博客 写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/134956765?spm1001.2014.3001.9457 1.1 访问测试多实例的部署 1.2 分别在三个tomcat服务上部署jsp的动态页面 mkdir /usr/local/tomcat/webapps/test vim …

stable-diffusion-webui(AI绘画)项目实现,即遇到的问题

实现步骤: 为了使环境中的库版本不会乱,导致自己电脑原来一些项目无法运行最好使用虚拟环境 下载miniconda 在搜索中搜所miniconda找到 建立虚拟环境 conda create --name sdwebui python3.10.6 每次运行激活这个虚拟环境 conda activate sdwebui …

生产环境_Spark处理轨迹中跨越本初子午线的经度列

使用spark处理数据集,解决gis轨迹点在地图上跨本初子午线的问题,这个问题很复杂,先补充一版我写的 import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.{Row, SparkSession} import org.apache.spark.sql.func…

抖音视频解析,无水印解析下载抖音视频

抖音视频解析,你是否经常遇到这样的情况,看到一些非常精彩的抖音视频,想要保存下来,但因为下载速度慢或者视频带有水印而感到困扰?那么,这款(抖音无水印解析工具)将是你的得力助手&a…

JMeter集结点的使用场景以及如何使用?

JMeter是一个开源的负载测试工具,它被广泛用于测试应用程序、Web服务和网络协议等的性能。在JMeter中,集结点(JMeter Cluster)是一种分布式测试环境,它允许多个JMeter实例同时工作来模拟高并发负载。 使用集结点的场景…

SaaS 电商设计 (五) 私有化部署-实现 binlog 中间件适配

一、 背景 具体的中间件私有化背景在上文 SaaS 电商设计 (二) 私有化部署-缓存中间件适配 已有做相关介绍.这里具体讨论的场景是通过解析mysql binlog 来实现mysql到其他数据源的同步.具体比如:在电商的解决方案业务流中经常有 ES 的使用场景,用以解决一些复杂的查询和搜索商品…

【答案】2023年国赛信息安全管理与评估第三阶段夺旗挑战CTF(网络安全渗透)

【答案】2023年国赛信息安全管理与评估第三阶段夺旗挑战CTF(网络安全渗透) 全国职业院校技能大赛高职组信息安全管理与评估 (赛项) 评分标准 第三阶段 夺旗挑战CTF(网络安全渗透) *竞赛项目赛题* 本文…

【贝叶斯分析】计算机科学专业博士作业二

1 第一题 1.1 题目 已知变量A和B的取值只能为0或1,A⫫𝑩,且𝑝(𝐴1)0.65,𝑝(𝐵1)0.77。C的取值与A和B有关,具体关系如下图所表: ABP(C1|A,B)000.1010.99100…

正则表达式:简化模式匹配的利器

正则表达式:简化模式匹配的利器 一、正则表达式简介1.1 正则表达式介绍1.2 正则表达式使用场景 二、正则表达式语法2.1 正则表达式元字符和特性2.2 正则表达式常用匹配 三、正则表达式实战3.1 常见的正则表达式用法3.2 正则表达式的过滤用法3.3 正则表达式的代码用法…

Fiddler中AutoResponder的简单使用

AutoResponder,自动回复器,用于将 HTTP 请求重定向为指定的返回类型。 这个功能有点像是一个代理转发器,可以将某一请求的响应结果替换成指定的资源,可以是某个页面也可以是某个本地文件 1.使用 打开“Fiddler”,点击…

11.jvm第三方工具使用实践

目录 概述GCEasy官网jvm内存占用情况关键性能指标堆内存与元空间优化 MAT安装MAT相关概念说明内存泄漏与内存溢出shallow heap及retained heapoutgoing references与incoming referencesDominator Tree GCViewerArthas下载安装与启动jdk8jdk 11jdk11自定义boot jarjdk17 常用命…

聊聊Java中的常用类String

String、StringBuffer、StringBuilder 的区别 从可变性分析 String不可变。StringBuffer、StringBuilder都继承自AbstractStringBuilder ,两者的底层的数组value并没有使用private和final修饰,所以是可变的。 AbstractStringBuilder 源码如下所示 ab…

fckeditor编辑器在Chrome浏览器下编辑时多出空格解决方法

查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置,前后端开发环境的配置,编辑器的配置,网络服务的配置,网络命令的应用与配置,windows常见问题的解决等。 文章目录 结尾语网络的梦想 dedecms网站后台采用fckedi…

「构」向云端 - 我与 2023 亚马逊云科技 re:Invent 大会

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 2023年亚马逊AWS re:Invent大会宣布一项Amazon Q的创新项目&#x…

nodejs+vue+微信小程序+python+PHP全国天气可视化分析系统-计算机毕业设计推荐

3.2.1前台用户功能 前台用户可分为未注册用户需求和以注册用户需求。 未注册用户的功能如下: 注册账号:用户填写个人信息,并验证手机号码。 浏览天气资讯:用户可以浏览天气资讯信息详情。 已注册用户的功能如下: 登录&…

Ajax详解

目录 服务器与Ajax 1.初识Ajax Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 2.Ajax可以做什么? 3.Ajax基础知识铺垫 4.前端相关的技术点: 5.客户端与服务器 6.客户端 浏览器、app、应用软件 7.服务器…

图论——二分图

图论——二分图 二分图通俗解释 有一个图,将顶点分成两类,边只存在不同类顶点之间,同类顶点之间设有边。称图 G 为二部图,或称二分图,也称欧图。 性质 二分图不含有奇数环图中没有奇数环,一定可以转换为二…