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

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

相关文章:

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

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

uniapp结合movable-area与movable-view实现拖拽功能

前言 因为公司业务开发需要拖拽功能。 ps&#xff1a;该功能只能针对高度一致的&#xff0c;如果高度不一致需要另外二开 演示 开始 <template><view style"height: 100%;"><movable-area :style"{width: 100%, height: allHeight px}"…...

十九(GIT2)、token、黑马就业数据平台(页面访问控制(token)、首页统计数据、登录状态失效)、axios请求及响应拦截器、Git远程仓库

1. JWT介绍 JSON Web Token 是目前最为流行的跨域认证解决方案&#xff0c;本质就是一个包含信息的字符串。 如何获取&#xff1a;在使用 JWT 身份验证中&#xff0c;当用户使用其凭据成功登录时&#xff0c;将返回 JSON Web Token&#xff08;令牌&#xff09;。 作用&#xf…...

文生图模型开源之光!ComfyUI - AuraFlow本地部署教程

一、模型介绍 AuraFlow 是唯一一个真正开源的文生图模型&#xff0c;由Fal团队开源&#xff0c;其代码和权重都放在了 FOSS 许可证下。基于 6.8B 参数优化模型架构&#xff0c;采用最大更新参数化技术&#xff0c;还重新标注数据集提升指令遵循质量。在物体空间和色彩上有优势…...

spring boot之@Import注解的应用

我们知道spring boot会通过ComponentScan定义包扫描路径进行业务定义的bean的加载&#xff0c;但是对于很多不在此包路径下定义的bean怎么办呢&#xff1f;比如其他jar包中定义的。这时候import就发挥作用了&#xff0c;通过它也可以实现bean的定义。具体是怎么做的呢&#xff…...

【记录】用JUnit 4的@Test注解时报错java.lang.NullPointerException的原因与解决方法

项目场景&#xff1a; 在练习黑马点评的逻辑过期解决缓存击穿时&#xff0c;编写了一个预热缓存数据的单元测试 SpringBootTest public class HmDianPingApplicationTests {Resourceprivate ShopServiceImpl shopService;Testpublic void testSaveShop() throws InterruptedE…...

Spring Boot 自动化脚本-多线程批量压缩图片

Spring Boot 自动化脚本-多线程批量压缩图片 支持多线程支持多路径配置支持断点续压支持压缩后文件层级路径不变脚本一键启动&#xff0c;支持本地 main 调用或远程 POST 接口调用 背景&#xff1a;在进行数据迁移时&#xff0c;发现附件文件夹过于庞大&#xff0c;且大都为图…...

依托 Spring Boot框架,精铸高扩展性招聘信息管控系统

1 绪 论 1.1 课题背景与意义 在Internet高速发展的今天&#xff0c;计算机的应用几乎完全覆盖我们生活的各个领域&#xff0c;互联网在经济&#xff0c;生活等方面有着举足轻重的地位&#xff0c;成为人们资源共享&#xff0c;信息快速传递的重要渠道。在中国&#xff0c;网上管…...

【前端】理解 JavaScript 对象属性访问的复杂性

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;理论基础&#xff1a;JavaScript 对象属性的访问模式1. 点符号访问&#xff08;Dot Notation&#xff09;2. 方括号访问&#xff08;Bracket Notation&#xff09;点符号…...

Django异步视图adrf解决办法

提问 在Django编写异步视图的时候会出现 AssertionError: Expected a Response, HttpResponse or HttpStreamingResponse to be returned from the view 或者 TypeError: sync_to_async can only be applied to sync functions. 诸如此类的错误的时候一般发生在异步视图中…...

【一文了解】C#基础-接口

目录 1. 定义 2. 接口的特点与规则 3. 接口的实现 3.1单接口实现 3.2多接口实现 4. 接口的作用和用途 1)扩展行为 2)规范行为 3)降低耦合 5. 接口与继承的比较 1)继承 2)接口 6. 接口与抽象类的比较 1)IComparable(比较器&#xff0c;常用) 2)IComparer(比较器)…...

活着就好20241210

亲爱的朋友们&#xff0c;大家早上好&#xff01;&#x1f31e; 今天是10号&#xff0c;星期二&#xff0c;2024年12月的第十天&#xff0c;同时也是第50周的开始&#xff0c;农历甲辰[龙]年十一月初六日。在这晨光熹微的美好时刻&#xff0c;愿那温暖而明媚的阳光轻轻拂过你的…...

多表设计 - 一对一多对多

一.一对一关系概述&#xff1a; 例如&#xff1a;一位用户只能有一张身份证&#xff0c;一张身份证也只能对应一位用户 如果用户基本信息查询频率比用户身份信息查询频率高&#xff0c;为了提高效率&#xff0c;可拆分为两张表&#xff1a; 此时如何体现一对一的关系呢&#xf…...

实现 DataGridView 下拉列表功能(C# WinForms)

本文介绍如何在 WinForms 中使用 DataGridViewComboBoxColumn 实现下拉列表功能&#xff0c;并通过事件响应来处理用户的选择。以下是实现步骤和示例代码。 1. 效果展示 该程序的主要功能是展示如何在 DataGridView 中插入下拉列表&#xff0c;并在选择某一项时触发事件。 2.…...

使用Java创建RabbitMQ消息生产者的详细指南

目录 在现代分布式系统中&#xff0c;消息队列是实现异步通信的重要工具。RabbitMQ作为一种流行的开源消息代理&#xff0c;支持多种消息协议&#xff0c;广泛应用于微服务架构和事件驱动的应用程序中。本文将深入探讨如何使用Java创建RabbitMQ的消息生产者&#xff0c;发送消息…...

【LC】160. 相交链表

题目描述&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&…...

Spark架构及运行流程

Spark架构图 Driver&#xff1a; 解析用户的应用程序代码&#xff0c;转化为作业(job)。创建SparkContext上下文对象&#xff0c;其负责与资源管理器(ClusterManager)通信&#xff0c;进行资源的申请、任务的分配和监控等。跟踪Executor的执行情况。可通过UI界面查询运行情况。…...

Linux安装Python2.7.5(centos自带同款)

卸载已安装的python,防止版本兼容问题 rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps 删除残余文件 whereis python |xargs rm -frv 安装前提是已安装gcc和g gcc --version g --version 下载安装python2.7.5 https://www.python.org/downloads/release/pyt…...

上传ssh公钥到目标服务器

创建密钥 ssh-keygen -t rsa -b 4096 -C "xxxx.xx"上传 sudo ssh-copy-id -i /Users/xx/.ssh/id_rsa.pub root127.0.0.1...

【LLMs】用LM Studio本地部署离线大语言模型

文章目录 一、下载LM Studio二、下载大语言模型1. 查看模型介绍2. 点击模型文件进行下载2.1 完整下载2.2 部分下载 三、加载模型1. 打开LM Studio图形化界面&#xff0c;点击**My Models**2. 然后&#xff0c;点击“...”&#xff0c;选择“change”&#xff0c;选择刚下载好的…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...