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_connect
    client.on_publish = on_publish

    try:
        # 连接到 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验一(下)----空间数据的编辑与处理(超超超详细!!!)

续上篇博客(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验一(上)----空间数据的编辑与处理(超超超详细!!!)-CSDN博客 继续更新 目录 什么是拓扑? 1.3.5道路拓…

深信服ATRUST与锐捷交换机端口链路聚合的配置

深信服ATRUST业务口原来只配置使用一个电口,近期出现流量达到800-900M接近端口的极限带宽。由于设备没有万光口,于是只好用2个光口来配置链接聚合。 下需附上深信服ATRST端口配置的截图,由于深信服ATRUST与锐捷交换机端口只共同支持源mac目的…

简易图书管理系统

javawebjspservlet 实体类 package com.ghx.entity;/*** author :guo* date :Created in 2024/12/6 10:13* description:* modified By:* version:*/ public class Book {private int id;private String name;private double pri…

【1】数据分析基础(一些概念)

数据分析的五步: (1)提出问题;(2)收集数据;(3)数据处理和清洗;(4)数据分析;(5)可视化&#xff0c…

Spring Boot 3.0 + MySQL 8.0 + kkFileView 实现完整文件服务

Spring Boot 3.0 MySQL 8.0 kkFileView 实现完整文件服务 背景:比较常见的需求,做成公共的服务,后期维护比较简单,可扩展多个存储介质,上传逻辑简单,上传后提供一个文件id,后期可直接通过此i…

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

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

OpenAI12天 –第3天的实时更新,包括 ChatGPT、Sora、o1 等

OpenAI提前开启了假期,推出了为期 12 天的活动,名为“OpenAI 12 天”。在接下来的一周左右的每一天,OpenAI 都将发布现有产品的新更新以及新软件,包括备受期待的 Sora AI 视频生成器。 OpenAI 首席执行官 Sam Altman 表示&#x…

06_掌握Python列表、元组、字典、集合

学习完本篇内容,你将掌握以下技能: 列表、元组、字典、集合的创建与删除列表、元组、字典、集合的访问及遍历列表、元组、字典、集合的操作方法列表、元组、字典、集合的生成式列表的基本操作 # 列表的基本操作 # 创建列表 list1 = [1, 2,

Ubuntu Server 22.04.5 LTS重启后IP被重置问题

Ubuntu Server 22.04.5 LTS重启后IP被重置问题 最近在使用Ubuntu Server 22.04做项目开发测试时发现每次重启和关机后,所设置的静态IP地址都会回复到安装系统时所设置的ip Ubuntu Server 22.04 官网下载地址:Ubuntu官方下载地址 对虚拟机下安装Ubuntu感…

QtCreator UI界面 菜单栏无法输入中文

如下图红色所示的区域,直接输入是无法输入中文的: 解决方法:在右边的属性值里输入即可 也可以参考这位同学的解决方法:友情链接

SCI论文丨机器学习与深度学习论文

目录 第一章、ChatGPT-4o使用方法与技巧 第二章、ChatGPT-4o辅助文献检索、总结与分析 第三章、ChatGPT-4o辅助学术论文选题、创新点挖掘与实验方案设计 第四章、ChatGPT-4o辅助学术论文开题与大纲生成 第五章、ChatGPT-4o辅助学术论文写作马拉松活动介绍 第六章、ChatGPT…

ES语句——DSL(kibana语句)

一、查询操作 查看当前索引的数据结构 _mapping Get ai-open-log*/_mapping 查询当前索引下的文档数以及分片信息 _count Get ai-open-log*/_count { "count": 12345, //当前索引下的文档总数 "_shards": { //分片信息 "total&…

【sgUploadImage】自定义组件:基于elementUI的el-upload封装的上传图片、相片组件,适用于上传缩略图、文章封面

sgUploadImage源码 <template><div :class"$options.name"><ul class"uploadImages"><liclass"uploadImage"v-loading"loadings[i]"v-for"(a, i) in imgFiles && imgFiles.length ? imgFiles : 1…

NAT traversal 原理 | TCP / UDP/ P2P

注&#xff1a;本文为 “NAT traversal ”相关的几篇文章合辑。 未整理去重。 NAT 穿越技术原理 Li_yy123 于 2020-12-08 18:54:26 发布 一、NAT 由来 为了解决全球公有 IPv4 的稀缺&#xff0c;提出了 NAT 技术。NAT 是 Network Address Translation 网络地址转换的缩写。 …

算法日记(2024.12.09)

1.二叉树的最小深度 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a;叶子节点是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;2 …

js:事件监听

事件监听 事件监听&#xff1a;让程序检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就调用一个函数做出响应&#xff0c;也称为绑定事件或注册事件 事件&#xff1a;编程系统内发生的动作或发生的事情 比如用户单击一个按钮下拉菜单 添加事件监听 事件监听三要…

Linux驱动开发(12):中断子系统–按键中断实验

本章我们以按键为例讲解在驱动程序中如何使用中断&#xff0c; 在学习本章之前建议先回顾一下关于中断相关的裸机部分相关章节&#xff0c; 这里主要介绍在驱动中如何使用中断&#xff0c;对于中断的概念及GIC中断控制器相关内容不再进行讲解。 本章配套源码和设备树插件位于“…

距离与AoA辅助的三维测距算法,适用于自适应基站数量的情况。订阅专栏后可直接查看完整源代码

本MATLAB 代码实现了一个基于距离与到达角(AoA)的三维测距系统,主要用于在动态环境中估计目标物体的位置。提供本算法与仅侧角(AoA)的定位误差对比 文章目录 代码运行结果源代码代码功能概述主要步骤分析初始化部分AOA定位绘图部分输出部分代码的应用和意义总结代码运行结…

解决社区版IDEA新建项目没有Spring Initializr 选项 2023.2版本

方法一 1.打开Preference 2.选择Plugins插件管理&#xff0c;并安装Spring Boot Helper&#xff08;选择marketplace -> install -> 安装后勾选&#xff09; 3.重启restart后打开IDEA&#xff0c;有spring initializr选项 结束。 参考 https://blog.csdn.net/qq_2…

计算机键盘简史 | 键盘按键功能和指法

注&#xff1a;本篇为 “计算机键盘简史 | 键盘按键功能和指法” 相关文章合辑。 英文部分机翻未校。 The Evolution of Keyboards: From Typewriters to Tech Marvels 键盘的演变&#xff1a;从打字机到技术奇迹 Introduction 介绍 The keyboard has journeyed from a humb…