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

目录

Flask + MQTT 实现消息订阅发布

准备

  • 本次项目主要使用到的库:flask_mqtt
markdown 复制代码
pip install flask_mqtt

开始

1.创建Flask项目

2创建py文件:mqtt_demo.py

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

3.代码实现

python 复制代码
from flask import Flask, request, jsonify
from flask_mqtt import Mqtt

app = 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

参考:

相关推荐
boligongzhu18 分钟前
ubuntu20.04搭建YOLOv11 GPU运行环境
linux·yolo·ubuntu·机器人
大吱佬29 分钟前
GO 八股整理(自用)
开发语言·后端·golang
froginwe1135 分钟前
Go 语言结构体
开发语言
vx_vxbs6637 分钟前
【SSM高校普法系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
android·java·python·mysql·小程序·php·idea
松涛和鸣1 小时前
DAY20 Optimizing VS Code for C/C++ Development on Ubuntu
linux·c语言·开发语言·c++·嵌入式硬件·ubuntu
田里的水稻1 小时前
Python_编程中代码注释相关格式 PEP8 — Python 官方代码风格指南
开发语言·python
一只乔哇噻1 小时前
java后端工程师+AI大模型进修ing(研一版‖day57)
java·开发语言·人工智能·算法·语言模型
Williams101 小时前
Java POI/Excel工具:终结OOM、精度丢失和i18n三大难题
java·开发语言·excel
丹宇码农1 小时前
consul集群搭建
python·consul
李绍熹1 小时前
Lua 错误处理详解
开发语言·junit·lua