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

news2024/12/26 12:05:10

        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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

想在iPad上远程操作安卓手机的APP,怎样实现iPad远程控制安卓?

学生党或互联网行业的打工人,人手连三台电子设备也很常见,手机、平板还有笔记本电脑一大堆,如果出门要全带上,背包压力也变大。 有没有想过用远程控制功能,让iPad远程控制安卓手机?这样做,出门就…

VBA高级应用30例应用在Excel中的ListObject对象:向表中添加注释

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以…

Spring源码分析之Bean的实例化(createBeanInstance())

前言: 通过Spring源码分析之Bean的创建过程(createBean)-CSDN博客我们可以知道如果没有动态代理以及循环依赖的前提之下的话那么一个普通的单例Bean的创建后就是实例化,属性填充,初始化这三个步骤那么这篇文章的话我们就先说一下实例化也就是doCreateBean方法里面的createBeanI…

一次“okhttp访问间隔60秒,提示unexpected end of stream“的问题排查过程

一、现象 okhttp调用某个服务,如果第二次访问间隔上一次访问时间超过60s,返回错误:"unexpected end of stream"。 二、最终定位原因: 空闲连接如果超过60秒,服务端会主动关闭连接。此时客户端恰巧访问了这…

蓝桥杯准备训练(lesson5 ,c++)

单目操作符与第 2 章 C/C输⼊输出(上) 8. 单⽬操作符8.1 和--8.1.1 前置 和 后置8.1.2 前置-- 和 后置-- 8.2 和 - 第 2 章 C/C输⼊输出(上)1. getchar 和 putchar1.1 getchar()1.2 putchar() 2. scanf 和 printf2.1 printf2.1.1…

Linux系统挂载exfat格式U盘教程,触觉智能RK3562开发板演示

本文介绍Linux系统(Ubuntu/Debian通用)挂载exfat格式U盘的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教…

LeetCode 0935.骑士拨号器:动态规划(DP)

【LetMeFly】935.骑士拨号器:动态规划(DP) 力扣题目链接:https://leetcode.cn/problems/knight-dialer/ 象棋骑士有一个独特的移动方式,它可以垂直移动两个方格,水平移动一个方格,或者水平移动两个方格,垂…

No.4 笔记 探索网络安全:揭开Web世界的隐秘防线

在这个数字时代,网络安全无处不在。了解Web安全的基本知识,不仅能保护我们自己,也能帮助我们在技术上更进一步。让我们一起深入探索Web安全的世界,掌握那些必备的安全知识! 1. 客户端与WEB应用安全 前端漏洞&#xff1…

PHP使用local-proxy的一种思路! | 架构师之路(19)

《架构师之路:架构设计中的100个知识点》 19.脚本语言使用长连接的一种思路 脚本类语言,例如PHP,不能像C/Java那样能搞服务常驻内存,不能搞长连接? 为什么脚本语言要搞长连接? 脚本类语言每次访问后端数据库…

【51单片机】程序实验1112.外部中断-定时器中断

主要参考学习资料:B站【普中官方】51单片机手把手教学视频 前置知识:C语言 单片机套装:普中STC51单片机开发板A4标准版套餐7 码字不易,求点赞收藏加关注(•ω•̥) 有问题欢迎评论区讨论~ 目录 程序实验11&12.外部中断-定时器…

驱动---1.DAC8552实现三角波输出

最近开始进行新项目的研发,考虑用DAC做一个前级输出,选择了DAC8552这个器件的一个模块,用了野火的指南者做主控,芯片是STM32F103VET6,主频是72MHz。 一、器件手册重要信息提取 1.DAC8552具有十六位的分辨率、双通道输…

虚幻引擎生存建造系统

先做一个建造预览模式,按下按键B后进入建造预览模式 首先创建自定义事件Preview Loop 用射线追踪摆放物体预览位置,并做一个预览材质 增强输入设置按键 每帧判断是否进入建造模式 预览模式制作成功! 接着做点击左键放置物品&#xff0…

IP研究 | 大数据洞察黄油小熊的爆火之路

一只来自泰国的小熊在国内红成了顶流。 今年,黄油小熊以烘焙店“打工人”的超萌形象迅速走红,2个月内火遍中国的社交媒体,泰国门店挤满飘洋过海求合影的中国粉丝,根据数说故事全网大数据洞察,黄油小熊2024年度的线上声…

深度学习案例:DenseNet + SE-Net

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 回顾DenseNet算法 DenseNet(Densely Connected Convolutional Networks)是一种深度卷积神经网络架构,提出的核心思想是通过在每一层与前面所有层进行直接连接…

【java学习笔记】Set接口实现类-LinkedHashSet

一、LinkedHashSet的全面说明 (就是把数组不同位置的链表当成一个节点然后相连)

【大模型系列篇】LLaMA-Factory大模型微调实践 - 从零开始

前一次我们使用了NVIDIA TensorRT-LLM 大模型推理框架对智谱chatglm3-6b模型格式进行了转换和量化压缩,并成功部署了推理服务,有兴趣的同学可以翻阅《NVIDIA TensorRT-LLM 大模型推理框架实践》,今天我们来实践如何通过LLaMA-Factory对大模型…

【C++】LeetCode:LCR 078. 合并 K 个升序链表

题干: 给定一个链表数组,每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中,返回合并后的链表。 解法:优先队列 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *ne…

数据结构和算法-04二叉树-04

广度优先的实现力扣中常见的二叉树相关问题及基本解决方案 tips: 在解决问题时,先确保问题能解决,再去考虑效率,这是解题的关键,切不可为追求效率而变成了技巧性解答。 广度优先 广度优先(层序遍历)遍历的方式是按层次…

DMA代码部分

第一个程序的接线图 OLED ShowHexNum(2,1,(uint32_t)&ADC1->DR,8); 这样可以看AD的DR寄存器的的地址(固定的)了 可以跑一下然后和手册对比 先查ADC1的地址 再在外设的总表里面, 查一下DR相对于上面地址的偏移量 所以其地址为4001 244C 研究一下外设寄存器的地址是怎么…

spdlog高性能日志系统

spdlog高性能日志系统 spdlog 是一个快速、简单、功能丰富的 C 日志库,专为现代 C 开发设计。它支持多种日志后端(如控制台、文件、syslog 等),并提供灵活的格式化和线程安全的日志输出。 1. 特点 极高的性能:大量的编…