当前位置: 首页 > news >正文

使用Mosquitto/python3进行MQTT连接

一、简介

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。
在这里插入图片描述

MQTT传输的消息分为主题Topic和负载payload,当订阅指定的Topic后,就会收到该Topic下的消息内容payload。

二、mosquitto使用

安装

https://mosquitto.org/download/

windows:
在这里插入图片描述
linux:

apt install mosquitto

开启broker

C:\Program Files\mosquitto>mosquitto.exe --help
C:\Program Files\mosquitto>mosquitto.exe -p 5555 -v

在这里插入图片描述

开启Subscriber

指定broker并指定"test"的topic进行订阅

C:\Program Files\mosquitto>mosquitto_sub.exe --help
C:\Program Files\mosquitto>mosquitto_sub.exe -h 127.0.0.1 -p 5555 -t  "test"

使用Publisher发送消息

指定"test"的topic发送payload为123的消息:

C:\Program Files\mosquitto>mosquitto_pub.exe --help
C:\Program Files\mosquitto>mosquitto_pub.exe -h 127.0.0.1 -p 5555 -t "test" -m "123"

在这里插入图片描述
此时的Subscriber:
在这里插入图片描述

三、解决TLS证书问题

使用mosquitto_sub时,因为tcp传输问题不成功:
在这里插入图片描述
原因是证书问题,导致TCP握手并不成功,图为携带证书后的结果:
在这里插入图片描述
为解决该问题,首先pip安装如下库:

pip3 install paho-mqtt

使用如下代码:

import ssl
import paho.mqtt.client as mqtt# 定义回调函数,处理接收到的消息
def on_message(client, userdata, msg):print(f"Topic: {msg.topic}, Message: {msg.payload.decode('utf-8')}")# 定义回调函数,处理连接事件
def on_connect(client, userdata, flags, rc):print("Connected with result code " + str(rc))# 订阅主题client.subscribe("your/topic")# 创建 MQTT 客户端
client = mqtt.Client()
# 设置连接和消息回调函数
client.on_connect = on_connect
client.on_message = on_message
# 禁用证书认证
client.tls_set(ca_certs=None, certfile=None, keyfile=None, cert_reqs=ssl.CERT_NONE, tls_version=ssl.PROTOCOL_TLS, ciphers=None)
# 连接到 MQTT 代理服务器
client.connect("your_host_address", 8883, 60)
# 开始处理消息循环
client.loop_start()# 保持连接
while True:pass# 停止消息循环
client.loop_stop()# 断开与 MQTT 代理服务器的连接
client.disconnect()

结果成功订阅:
在这里插入图片描述

http://www.lryc.cn/news/264280.html

相关文章:

  • JavaWeb笔记之前端开发HTML
  • 通过IP地址定位解决被薅羊毛问题
  • Leetcode 122 买卖股票的最佳时机 II
  • 音频文件合成
  • 20231220将NanoPC-T4(RK3399)开发板的Android10的SDK按照Rockchip官方挖掘机开发板编译打包刷机之后启动跑飞
  • vivo 容器平台资源运营实践
  • ASP.NET Core面试题之Redis高频问题
  • 【教程】Ubuntu基本软件安装
  • Jenkins 构建环境指南
  • 基于Go语言的HTTP路由设计与实现
  • SpringMVC01
  • 基于Redis限流(aop切面+redis实现“令牌桶算法”)
  • 【小白专用】php pdo方式连接sqlserver 设置方法 更新23.12.21
  • 打开C#项目时出现“error : 找不到指定的 SDK”的错误解决方法汇总
  • MIT 6.824 练习1
  • Git报错x509: certificate signed by unknown authority
  • OpenCV技术应用(8)— 如何将视频分解
  • Swagger2接口测试文档
  • 【Java】BigDecimal 比较自动化页面获取数据的大小
  • 开源键盘工程QMK
  • Elasticsearch的批量bulk 提交 写入的方式会有顺序问题吗?
  • 云原生之深入解析如何使用Vcluster Kubernetes加速开发效率
  • PCL 已知同名点对计算旋转矩阵并对点云进行旋转
  • MyBatis ORM映射
  • 在线客服系统推荐:为何选择Zoho Desk?
  • 手绘心情树叶,探索情绪世界
  • 智能优化算法应用:基于水基湍流算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 打开和关闭GBASE南大通用数据库连接
  • Zookeeper 集群搭建过程中常见错误
  • Linux开发工具——vim篇