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

目录

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

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
    在这里插入图片描述
  • 设置好后直接运行项目

5.测试

使用MQTTX进行消息测试

5.1 测试消息接收
  • 创建连接

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

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

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

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

本次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.mzph.cn/news/203619.shtml

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

相关文章

Leetcode刷题详解——最长湍流子数组

1. 题目链接:978. 最长湍流子数组 2. 题目描述: 给定一个整数数组 arr ,返回 arr 的 最大湍流子数组的长度 。 如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是 湍流子数组 。 更正式地来说,当 arr 的子…

ALPHA开发板烧录工具MfgTool简介

一. 简介 前面我们已经移植好了 uboot 和 linux kernle ,制作好了根文件系统。但是我们移植都是通 过网络来测试的,在实际的产品开发中肯定不可能通过网络来运行。 因此,我们需要将 uboot 、 linux kernel 、 .dtb( 设备树 ) 和 rootf…

串口环形收发原理及实现

一、环形收发队列构建 1、构造环形收发数组及其长度 #define buff_size 10 Unsigned char buff[buff_size]; 2、定义环形收发读/写位置 u16 R_Buff; u16 W_Buff; 3、结构体封装 typedef struct Qbuff {u16 write; //写位置u16 read; //读位置u8 buf…

Zabbix自定义飞书webhook告警媒介1

说明:此配置仅适用于7版本及以上,低版本可能有问题 JavaScript 内容如下: try {var sourceData JSON.parse(value),req new HttpRequest(),response;if (sourceData.HTTPProxy) {req.setProxy(sourceData.HTTPProxy);}req.addHeader(Conte…

pytorch中的transpose用法

注意:维数从0开始,0维 1维2维…,负数代表从右往左数,-1代表第一维,以此类推 import torch import numpy as np# 创建一个二维数组 arr torch.tensor([[[1, 2],[3, 4]],[[5, 6],[7, 8]]]) print("原始数组:"…

Docker部署.NET6项目

Docker的三大核心概念 1、docker仓库(repository) docker仓库(repository)类似于代码库,是docker集中存放镜像的场所。实际上,注册服务器是存放仓库的地方,其上往往存放着很多仓库。每个仓库集…

案例058:基于微信小程序的智能社区服务系统

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

操作符(原码反码补码)

目录 前言&#xff1a; 原反补码&#xff1a; 位操作符&#xff1a; &#xff06; &#xff5c; &#xff3e; &#xff5e; >> << 总结&#xff1a; 逻辑操作符 && || 其他操作符&#xff1a; sizeof -- () &#xff1f;&#xf…

AMEYA360--罗姆与Quanmatic公司利用量子技术优化制造工序并完成验证

全球知名半导体制造商罗姆(总部位于日本京都市)于2023年1月起与 Quanmatic Inc.(总部位于日本东京都新宿区&#xff0c;以下简称“Quanmatic”)展开合作&#xff0c;在半导体制造工序之一的EDS工序中测试并引入量子技术&#xff0c;以优化制造工序中的组合。目前&#xff0c;双…

C#excel导入dategridview并保存到数据库/dategridview增加一行或几行一键保存数据库

excel导入到dategridview显示并保存到数据库 dategridview增加一行或几行一键保存数据库 ExcelHelper类(这个要导入NPOI包) using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using Syste…

dtaidistance笔记:dtw_ndim (高维时间序列之间的DTW)

1 数据 第一个维度是sequence的index&#xff0c;每一行是多个元素&#xff08;表示这一时刻的record&#xff09; from dtaidistance.dtw_ndim import *s1 np.array([[0, 0],[0, 1],[2, 1],[0, 1],[0, 0]], dtypenp.double) s2 np.array([[0, 0],[2, 1],[0, 1],[0, .5],[0…

Elasticsearch--解决磁盘使用率超过警戒水位线

原文网址&#xff1a;Elasticsearch--解决磁盘使用率超过警戒水位线_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决ES磁盘使用率超过警戒水位线的问题。 问题描述 当客户端向 Elasticsearch 写入文档时候报错&#xff1a; cluster_block_exception [FORBIDDEN/12/inde…

Qt进程和线程

一、进程 在设计一个应用程序时,有时不希望将一个不太相关的功能集成到程序中,或者是因为该功能与当前设计的应用程序联系不大,或者是因为该功能已经可以使用现成的程序很好的实现了,这时就可以在当前的应用程序中调用外部的程序来实现该功能,这就会使用到进程。Qt应用程序…

亿胜盈科 HT4182,HT4186,HT4188 电量均衡 同步升压型 双节理电池充电器

HT4182&#xff0c;HT4186&#xff0c;HT4188是一款5V输入&#xff0c;升压模式的充电管理IC&#xff0c;适用于双节串联鲤电池。其能自适应任意5V电源进行充电&#xff0c;并且由输入过压、欠压保护。 HT4182&#xff0c;HT4186&#xff0c;HT4188采用同步升压结构&#xff0…

基于单片机出租车计价器控制系统

**单片机设计介绍&#xff0c;基于单片机出租车计价器控制系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的出租车计价器控制系统是一个用于控制和管理出租车费用计算的电子设备。下面是一个简单的系统设计介绍&…

Windows 下 PyTorch 入门深度学习环境安装与配置 GPU 版

1.确定自己的硬件信息&#xff0c;确定电脑有英伟达 (NVIDIA)显卡 在任务栏上右键打开任务管理器 2.下载安装 Anaconda &#xff08;建议安装迅雷下载&#xff0c;同时浏览器添加扩展 “迅雷Chrome支持”&#xff09; https://www.anaconda.com/ https://repo.anaconda.com/arc…

文本编辑软件:Ulysses mac介绍说明

Ulysses mac是面向 Mac、iPhone 和 iPad 的一站式写作环境。Ulysses 提供令人愉悦、专注的写作体验&#xff0c;加上高效文稿管理、无缝同步以及灵活导出。markdown 可以直接对于文本进行不同类型的分类、编辑&#xff0c;比如标题、注解、评论之类的内容。 Ulysses让注意力专…

嵌入式学习---ARM中断控制系统

目录 外部事件与CPU的交互方式查询方式中断方式 什么是中断源S3C2440支持60个中断源FIQ和IRQ 中断处理流程将外设中断通知给CPUSUBSRCPND寄存器INTSUBMSK寄存器SRCPND寄存器INTMSK寄存器INTMOD寄存器INTPND寄存器 硬件中断处理是实时系统设计的最重要、最关键的问题。 外部事件…

Linux shell编程学习笔记33:type 命令

目录 0 引言1 type 命令的功能和格式 1.1 type命令的功能1.2 type 命令的格式2 type命令用法实例 2.1用type命令查看shell内置命令&#xff08;以echo命令为例&#xff09;2.2 用type命令查看别名&#xff08;以ls命令为例&#xff09;2.3 用type命令同时查看shell内置命令和别…

抽象类和接口(超重点!!)

[本节目标] 1.抽象类 2.接口 3.Object类 1.抽象类 1.1 抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&a…