MQTT消息服务器mosquitto介绍及说明

        Mosquitto是一个开源的消息代理软件,支持MQTT协议(消息队列遥测传输协议)。MQTT是一种轻量级的发布/订阅消息传输协议,专为低带宽、不可靠网络环境下的物联网设备通信而设计。以下是关于Mosquitto服务器的一些介绍和说明:

1.基本功能

  • 消息代理:Mosquitto作为MQTT代理,负责接收和分发消息。客户端可以通过它订阅主题并接收消息,或者向主题发布消息。
  • 轻量级:Mosquitto非常轻量级,适合嵌入式设备和资源受限的环境。
  • 支持QoS等级:支持MQTT协议中的质量服务等级(QoS)0、1和2,确保消息可靠性。

2.安装与配置

  • 跨平台支持:可在Linux、Windows、macOS等多个平台上运行。
  • 安装:在Linux上可以通过包管理器(如 aptyum)安装,在Windows和macOS上可以通过下载预编译的二进制文件或通过Homebrew安装。
  • 配置文件:Mosquitto的行为可以通过配置文件进行自定义,比如监听端口、安全认证、日志记录等。

        在windows上安装的时候,通过下载编译好的exe安装包,双击点击安装即可,就和普通安软件一样无差别,安装文件链接我在下面有分享,记录好安装路径,将该路径添加到系统路径下即可,然后启动的时候,直接在命令行运行mosquitto,命令即可,不报错就表示启动成功了。我的安装后的添加路径如下:

 启动如下:

配置可以选择默认的本机,也可以使用自己预设的端口及IP. 配置好之后就可以进行测试了。

首先,需要确保安装了 paho-mqtt 库。你可以使用 pip 进行安装:

pip install paho-mqtt

测试代码如下:

import json
import paho.mqtt.client as mqtt# MQTT 服务器配置
MQTT_BROKER = "localhost"   # 服务器地址,如果 Mosquitto 运行在本地
MQTT_PORT = 1883            # 默认 MQTT 端口
MQTT_TOPIC = "your/topic"   # 你要发布的主题# 要发送的字典数据
data = {"temperature": 25.5,"humidity": 60,"status": "OK"
}# 将字典转换为 JSON 字符串
payload = json.dumps(data)# 回调函数:连接成功时调用
def on_connect(client, userdata, flags, rc):if rc == 0:print("连接到 MQTT 代理服务器成功")else:print(f"连接失败,错误码 {rc}")# 回调函数:发布消息后的回调
def on_publish(client, userdata, mid):print(f"消息已发布,消息 ID: {mid}")def main():# 创建 MQTT 客户端实例client = mqtt.Client()# 设置回调函数client.on_connect = on_connectclient.on_publish = on_publishtry:# 连接到 MQTT 代理服务器client.connect(MQTT_BROKER, MQTT_PORT, 60)# 启动网络循环(非阻塞)client.loop_start()# 发布消息result = client.publish(MQTT_TOPIC, payload)# 等待发布完成status = result[0]if status == 0:print(f"成功发布消息到主题 `{MQTT_TOPIC}`")else:print(f"发送消息失败,状态码 {status}")except Exception as e:print(f"发生错误: {e}")finally:# 停止网络循环并断开连接client.loop_stop()client.disconnect()if __name__ == "__main__":main()

代码说明

1.导入必要的库
json:用于将字典转换为 JSON 字符串。
paho.mqtt.client:用于 MQTT 通信。

2.配置 MQTT 服务器信息
MQTT_BROKER:MQTT 代理服务器地址,通常为 localhost 如果 Mosquitto 运行在本地。
MQTT_PORT:MQTT 端口,默认是 1883
MQTT_TOPIC:发布消息的主题,可以根据需要修改。

3.准备要发送的数据
- 创建一个字典 data,包含需要发送的数据。
- 使用 json.dumps() 将字典序列化为 JSON 字符串 payload

4.定义回调函数
on_connect:处理连接服务器的响应。
on_publish:确认消息发布后的响应。

5.主函数 main()
- 创建 MQTT 客户端实例并设置回调函数。
- 连接到 MQTT 代理服务器。
- 启动网络循环 client.loop_start(),使客户端能够处理网络流量(非阻塞模式)。
- 使用 client.publish() 发布消息到指定主题。
- 根据发布结果打印相应的信息。
- 最后,停止网络循环并断开连接。

运行代码

        确保 Mosquitto 服务器正在运行。你可以在终端中运行以下命令启动 Mosquitto(如果尚未启动):

mosquitto

然后运行上面的 Python 脚本:

python your_script.py

如果一切设置正确,你应该会看到类似如下的输出:

连接到 MQTT 代理服务器成功
成功发布消息到主题 `your/topic`
消息已发布,消息 ID: 1

订阅主题以验证消息

你可以打开另一个终端,使用 mosquitto_sub 命令订阅主题,验证消息是否成功发送:

mosquitto_sub -h localhost -t your/topic

发布消息后,订阅端应显示发送的 JSON 数据:

{"temperature": 25.5, "humidity": 60, "status": "OK"}

 

额外提示

  • 身份验证:如果你的 Mosquitto 服务器配置了用户名和密码,请在连接时提供:
    client.username_pw_set("your_username", "your_password")
    
  • 安全连接:如果需要使用 TLS/SSL,请相应配置:
    client.tls_set(ca_certs="path/to/ca.crt")
    
  • 错误处理:生产环境中建议添加更完善的错误处理和重试机制。

3.安全特性

  • TLS/SSL支持:支持TLS/SSL加密,确保消息在传输过程中的安全性。
  • 认证和授权:支持用户名和密码认证,以及基于ACL(访问控制列表)的访问控制。

4.性能

  • Mosquitto能够处理大量的并发客户端连接,性能良好,适合大规模物联网部署。

5.使用场景

  • 物联网:用于物联网设备之间的信息传递,如智能家居、工业自动化等。
  • 消息通知系统:可以用于实时消息推送系统,支持多客户端的实时通信。
  • 移动应用:适合移动应用之间的低延迟消息传递。

6.常用命令

  • 启动Mosquitto服务:mosquitto -c /path/to/mosquitto.conf
  • 订阅主题:mosquitto_sub -h localhost -t test/topic
  • 发布消息:mosquitto_pub -h localhost -t test/topic -m "Hello, World!"

7.社区与支持

  • Mosquitto有活跃的开发社区,提供文档、论坛和支持,以帮助用户解决问题。

Mosquitto作为MQTT协议的一个实现,因其高效、稳定和易于使用而被广泛应用于物联网领域。

8.下载链接

        windows版本的服务器可以去我的CSDN上下载,(mosquitto-1.6.13-install-windows-x64)下载的链接如下:

https://download.csdn.net/download/mzl_18353516147/90089326?spm=1001.2014.3001.5503

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

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

相关文章

React 组件中 State 的定义、使用及正确更新方式

​🌈个人主页:前端青山 🔥系列专栏:React篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容React 组件中 State 的定义、使用及正确更新方式 前言 在 React 应用开发中,state …

DLL注入(AppInit_DLLs)

DLL注入(AppInit_DLLs) 一:概述 利用注册表进行dll注入,Windows操作系统的注册表默认是提供了AppInit_DLLs和LoadAppInit_DLLs两个注册表项的。打开我们的注册表编辑器,将要注入的DLL的路径字符串写入到AppInit_DLLs项目,然后将…

Spring Boot + Spring AI快速体验

Spring AI快速体验 1 什么是Spring AI主要功能 2 快速开始2.1 版本说明2.2 配置文件2.3 pom依赖2.3.1 spring maven仓库2.3.2 核心依赖 2.4 定义ChatClient2.5 启动类2.6 测试 3 参考链接 1 什么是Spring AI Spring AI是Spring的一个子项目,是Spring专门面向于AI的…

算法基础学习Day5(双指针、动态窗口)

文章目录 1.题目2.题目解答1.四数之和题目及题目解析算法学习代码提交 2.长度最小的子数组题目及题目解析滑动窗口的算法学习方法一:单向双指针(暴力解法)方法二:同向双指针(滑动窗口) 代码提交 1.题目 18. 四数之和 - 力扣(LeetCode&#x…

通义千问sft-甄嬛对话

流程步骤 https://www.datawhale.cn/activity/110/21/76?rankingPage1 按照上面的流程,准备好数据之后就可以直接对7b的模型进行指令微调了,整个流程不是很复杂,操作起来比较方便。但是发布服务等了较长时间,以为出了bug 结果展…

1-6 ESP32控制LED灯

1.0 LED简介 LED是英文 "Light Emitting Diode" 的缩写,中文翻译为发光二极管。它是一种能够将电能转化为光能的电子元件。LED是一种半导体器件,在通电时会发出可见光。和传统的白炽灯泡或荧光灯相比,LED具有诸多优点:高…

前端成长之路:HTML(1)

每个网页都会有一个基本的结构标签&#xff08;也称为骨架标签&#xff09;&#xff0c;页面内容也是在这些基本标签上书写。 基本结构标签&#xff08;骨架标签&#xff09; <html></html>标签是HTML标签&#xff0c;是页面中最大的标签&#xff0c;被称为根标签…

细说敏捷:敏捷四会之回顾会

在前面的分享中&#xff0c;我们已经梳理了计划会、每日站会和复盘会的召开要点&#xff0c;本篇我们再对Scrum敏捷四大仪式中的最后一个会议仪式 - 迭代回顾会 进行探讨 回顾会的目的和作用 回顾会因为和复盘会一般都放在迭代的最后一天&#xff0c;而且通常安排是相邻在一起…

重生之我在异世界学智力题(1)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言智力题题目&#xff1a;《奇怪的时钟…

【模型对比】ChatGPT vs Kimi vs 文心一言那个更好用?数据详细解析,找出最适合你的AI辅助工具!

在这个人工智能迅猛发展的时代&#xff0c;AI聊天助手已经深入我们的工作与生活。你是否曾在选择使用ChatGPT、Kimi或是百度的文心一言时感到一头雾水&#xff1f;每款AI都有其独特的魅力与优势&#xff0c;那么&#xff0c;究竟哪一款AI聊天助手最适合你呢&#xff1f;本文将带…

【时时三省】(C语言基础)结构体内存对齐练习题

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 练习一 这个输出结果是8 练习二 这个输出结果是16 练习三 这个输出结果是32 上面的输出结果都是根据结构体对齐规则来计算的

【python】UTF-8编码

# -*- coding: utf-8 -*-import sys reload(sys) # This reloads the system default encoding setup sys.setdefaultencoding(utf-8) # Set the default encoding to utf-8 print(sys.getdefaultencoding())写在最后&#xff1a;若本文章对您有帮助&#xff0c;请点个赞啦 ٩…

MySQL 性能优化详解

MySQL 性能优化详解 硬件升级系统配置优化调整buffer_pool数据预热降低日志的磁盘落盘 表结构设计优化SQL语句及索引优化SQL优化实战案例 MySQL性能优化我们可以从以下四个维度考虑&#xff1a;硬件升级、系统配置、表结构设计、SQL语句和索引。 从成本上来说&#xff1a;硬件升…

PCB设计规范

过孔设计 过孔盖油工艺&#xff08;也成为连塞带印&#xff09;&#xff1a;常规工艺、免费工艺&#xff0c;无特殊情况也建议使用此工艺。过孔大小建议直径在0.3mm-0.5mm之间。最省钱&#xff0c;效果最好。 非金属化槽孔 PCB制造商在加工非金属化槽孔时通常采用锣刀加工。最…

MVC基础——市场管理系统(二)

文章目录 项目地址三、Produtcts的CRUD3.1 Products列表的展示页面(Read)3.1.1 给Product的Model里添加Category的属性3.1.2 View视图里展示Product List3.2 增加Product数据(Add)3.2.1 创建ViewModel用来组合多个Model3.2.2 在_ViewImposts里引入ViewModels3.2.3 添加Add的…

vivado中,generate output product 和Create HDL wrapper的作用

generate output product 以zynq的ip核举例&#xff0c;没有generate output product之前&#xff0c;在ip source 什么也看不到。 但是同样的一个ip核&#xff0c;generate output product之后&#xff0c;会生成综合&#xff0c;布线和仿真文件&#xff0c;约束文件等等。 …

uni-app 组成和跨端原理 【跨端开发系列】

&#x1f517; uniapp 跨端开发系列文章&#xff1a;&#x1f380;&#x1f380;&#x1f380; uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…

双目相机的标定,视差图,深度图,点云生成思路与实现。

该文档记录从双目相机标定到点云生成的所有过程&#xff0c;同时会附上代码。 代码直接能跑。https://github.com/stu-yzZ/stereoCamera 目录 大致思路如下&#xff1a; 一、相机标定 1、相机参数介绍 2、单目相机标定 3、双目相机标定 二、图片畸变矫正 三、极线矫正…

Selenium:强大的 Web 自动化测试工具

Selenium&#xff1a;强大的 Web 自动化测试工具 在当今的软件开发和测试领域&#xff0c;自动化工具的重要性日益凸显。Selenium 就是一款备受欢迎的 Web 自动化测试工具&#xff0c;它为开发者和测试人员提供了强大的功能和便利。本文将详细介绍 Selenium 是什么&#xff0c…

基于 Spring Boot + Vue 的宠物领养系统设计与实现

引言 近年来&#xff0c;随着人们生活水平的提高&#xff0c;宠物逐渐成为许多家庭的重要成员。然而&#xff0c;宠物的流浪和弃养问题日益严重&#xff0c;这促使社会对宠物领养的需求不断增长。为解决宠物领养中信息不对称、领养流程复杂等问题&#xff0c;设计并实现一个基…