MQTT(详解)

news2024/9/23 13:20:34

什么是MQTT

        MQTT(Message Queuing Telemetry Transport)是一种轻量级的通信协议,用于在设备之间传输消息它通常用于物联网(IoT)和传感器网络中,可以在不同设备之间进行可靠的通信,而且资源消耗相对较低。MQTT基于发布/订阅模型,允许设备发布消息到特定主题(topic),并让订阅了相同主题的设备接收这些消息。这使得MQTT成为了在资源受限或需要实时通信的环境中非常有用的协议,比如监控系统、传感器网络、智能家居等领域。

MQTT原理

        MQTT 是基于 TCP/IP 协议栈实现的,它使用了一个轻量级的客户端-服务器通信模式。以下是 MQTT 的基本实现原理:

        客户端和服务器:MQTT 通信涉及两个主要组件:客户端和服务器(或称为代理,Broker)。客户端可以是任何能够实现 MQTT 协议的设备或应用程序。

        发布/订阅模型:MQTT 使用了一种发布/订阅模型。客户端可以发布(Publish)消息到特定的主题(Topic),也可以订阅(Subscribe)特定主题以接收相关消息。

        主题(Topic):主题是消息的标识符,它允许客户端识别并选择感兴趣的消息类别。客户端可以订阅一个或多个主题,也可以发布到一个或多个主题。

        质量服务(QoS):MQTT 提供了不同级别的消息传递服务质量,从最多一次(QoS 0)到至少一次(QoS 1)以及只有一次(QoS 2)传递。这决定了消息的可靠性。

        连接和保持活动:客户端通过 TCP/IP 连接到 MQTT 代理。一旦连接建立,客户端可以发送订阅请求、发布消息等。为了保持连接活跃,客户端可以定期发送心跳包(PINGREQ)给服务器。

        持久会话:客户端可以选择建立持久会话,这允许客户端在重新连接后接收到其在离线期间发布的消息。

        消息保留:服务器可以选择保留某个主题的最新消息,以便新订阅者在订阅后立即收到消息。

        安全性:MQTT 可以通过添加安全层(例如TLS/SSL)来保护通信内容,确保数据的安全性。

相关概念知识

        1. 协议基础

        MQTT 是一种发布/订阅(Publish/Subscribe)消息传递协议,专为低带宽、高延迟或不稳定网络环境设计。它基于 TCP/IP 或其他网络协议实现,可以运行在任何与网络相关的设备上。

        2. 客户端和服务器

        MQTT 包含两个主要角色:客户端和代理(Broker)。

        客户端:可以是设备、应用程序或其他系统,它们可以发布消息或订阅主题以接收消息。

        代理:是中介,负责接收来自客户端的消息,并将其传递给感兴趣的订阅者。

        3. 主题(Topics)

        主题是 MQTT 中消息的主要标识符。它是一个简单的字符串,用于标识发布和订阅的消息类别。

        订阅者可以订阅一个或多个主题以接收相关消息。

        发布者发布消息时,可以选择指定一个或多个主题。

        4. 发布(Publish)

        客户端可以发布消息到一个或多个主题。发布消息时,可以指定消息的质量服务等级(QoS)。

        5. 订阅(Subscribe)

        客户端可以订阅一个或多个主题,以接收相关的消息。订阅者可以选择订阅特定主题的所有消息,或者只接收保留的最新消息。

        6. 质量服务等级(QoS)

        MQTT 提供了三个不同级别的消息传递服务质量。

        QoS 0:至多一次,消息可能会丢失或重复传递。

        QoS 1:至少一次,确保消息至少传递一次,但可能会重复传递。

        QoS 2:只有一次,确保消息仅传递一次。

        7. 保留(Retained)

        服务器可以选择保留某个主题的最新消息,以便新订阅者在订阅后立即收到消息。

        8. 持久会话(Clean Session)

        客户端可以选择建立持久会话,允许客户端在重新连接后接收其在离线期间发布的消息。

        9. 心跳包(Keep Alive)

        为了保持连接活跃,客户端和服务器之间定期发送心跳包以确认连接状态。

        10. 安全性

        MQTT 可以通过添加安全层(例如TLS/SSL)来保护通信内容,确保数据的安全性。

MQTT优点

        1. 轻量级通信:MQTT 的消息头部相对较小,占用的带宽和资源较少,使其在受限的网络环境下表现良好。

        2. 实时通信:支持快速响应,适用于需要实时交互的应用,如远程控制或监控。

        3. 发布/订阅模型:采用发布/订阅模型,支持多设备之间的消息传递,不需要直接连接到特定设备。

        4. 消息保证:提供多个服务质量(QoS)级别,从最多一次传递到确保至少一次传递,可以根据需要保证消息的可靠传递。

        5. 持久会话:允许客户端建立持久会话,使得在客户端离线时,可以保留未发送的消息,等待下次连接时发送。

        6. 消息保留:服务器可以保留特定主题的最新消息,以便新订阅者在订阅后立即接收消息。

        7. 安全性:可以通过添加安全层(例如TLS/SSL)来保护通信内容,确保数据的安全性。

        8. 跨平台:MQTT 是一个开放的协议,可以在不同的硬件平台和操作系统上实现。

MQTT缺点

        1. 消息丢失或重复:在网络不稳定的情况下,可能会发生消息丢失或重复传递的情况,需要额外的措施来处理。

        2. 连接管理:需要有效地管理客户端连接,以避免资源浪费。

        3. 复杂性:在复杂的网络拓扑或大规模部署时,可能需要仔细规划和管理主题和订阅。

        4. 资源消耗:如果配置不当,可能会导致设备的资源消耗过高。

        5. 安全性设置:需要适当地配置安全性设置以保护通信内容,否则可能会存在安全风险。

        MQTT 是一种非常有用的通信协议,特别适用于物联网、传感器网络和实时监控等应用。然而,在使用时需要考虑到其特性以及网络环境,以确保其有效运行。

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

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

相关文章

单元测试,集成测试,系统测试的区别是什么?

实际的测试工作当中,我们会从不同的角度对软件测试的活动进行分类,题主说的“单元测试,集成测试,系统测试”,是按照开发阶段进行测试活动的划分。这种划分完整的分类,其实是分为四种“单元测试,…

分布式消息队列:Rabbitmq(2)

目录 一:交换机 1:Direct交换机 1.1生产者端代码: 1.2:消费者端代码: 2:Topic主题交换机 2.1:生产者代码: 2.2:消费者代码: 二:核心特性 2.1:消息过期机制 2.1.1:给队列中的全部消息指定过期时间 2.1.2:给某条消息指定过期时间 2.2:死信队列 一:交换机 1:Direct交…

Gloss优化

Gloss优化,Route – Gloss – Parameters .清除不必要的线和过孔,圆滑线,焊盘中间的线,把转角变成圆弧,自动布线总会产生一些布线效果不好、多余过孔等问题。此时可以利用allegro提供的Gloss命令对设计进行优化和调整&…

Facebook广告效果数据获取

一、背景 公司每年在Facebook和Google上投放了大量的广告,我总不能让老板登录Facebook广告投放平台上去看广告效果,其实老板只关注每天花了多少钱引来了多少客户,每个客户平均花费多少钱,其它的他才不关心,有Facebook…

工作小计-GPU硬编以及依赖库 nvcuvidnvidia-encode

工作小计-GPU编码以及依赖库 已经是第三篇关于编解码的记录了。项目中用到GPU编码很久了,因为yuv太大,所以编码显得很重要。这次遇到的问题是环境的搭建问题。需要把开发机上的环境放到docker中,以保证docker中同样可以进行GPU的编码。 1 定…

SpringCloud 微服务全栈体系(五)

第七章 Feign 远程调用 先来看我们以前利用 RestTemplate 发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一 参数复杂 URL 难以维护 Feign 是一个声明式的 http 客户端,官方地址:https://github.…

国家数据局正式揭牌,数据专业融合型人才迎来发展良机

文章目录 每日一句正能量摘要《数据要素安全流通》《Python数据挖掘:入门、进阶与实用案例分析》《数据保护:工作负载的可恢复性 》《Data Mesh权威指南》《分布式统一大数据虚拟文件系统 Alluxio原理、技术与实践》《云原生数据中台:架构、方…

【安装tensorflow-CPU版本】

一、安装目的二、安装过程三、总结 一、安装目的 使自己的jupyter能用tensorflow 二、安装过程 首先打开anaconda prompt 接着输入conda list 查看自己是否安装了tensorflow 在 Python 中使用 pip 工具来升级 pip 自身并指定了使用清华大学的镜像源进行安装 python -m pip …

防雷接地检测方法应用方案

防雷接地是指为了保护建筑物、设备和人员免受雷电危害而采取的将雷电电流导入地面的措施。 地凯科技防雷接地的测试方案一般包括以下几个方面: 测试目的:明确测试的对象、范围、要求和依据。 测试内容:根据不同类型的防雷接地装置&#xf…

计算机操作系统重点概念整理-第二章 进程管理【期末复习|考研复习】

第二章 进程管理 【期末复习|考研复习】 系列文章传送门: 第一章 计算机系统概述 第二章 进程管理 第三章 进程同步 第四章 内存管理 第五章 文件管理 第六章 输出输出I/O管理 文章目录 第二章 进程管理 【期末复习|考研复习】前言二、进程管理2.1进程的定义&#…

【随机过程】布朗运动

这里写目录标题 Brownian motion Brownian motion The brownian motion 1D and brownian motion 2D functions, written with the cumsum command and without for loops, are used to generate a one-dimensional and two-dimensional Brownian motion, respectively. 使用cu…

JVM虚拟机:对象在内存中的存储布局

本文重点 在前面的过程中,我们学习了对象创建过程,那么一个对象在内存中的布局是什么样的呢? 对象在内存中的存储布局 普通对象 当我们创建一个对象的时候,它由三部分组成,分别为对象头(MarkWord+class指针(指向class对象)),实例数据(对象的成员变量),填充。如果…

C++——C++入门(二)

C 前言一、引用引用概念引用特性常引用使用场景传值、传引用效率比较值和引用的作为返回值类型的性能比较 引用和指针的区别 二、内联函数概念特性知识点提升 三、auto关键字类型别名思考auto简介auto的使用细则auto不能推导的场景 四、基于范围的for循环范围for的语法范围for的…

Linux操作系统的基础IO

目录 系统文件IOopen函数0 & 1 & 2文件描述符的分配规则重定向输入重定向输出重定向追加重定向dup2 FILE 文件系统inode 软硬链接软链接硬链接 动态库和静态库动静态库的命名方式静态库制作一个库使用库 动态库制作一个库使用库 系统文件IO open函数 int open(const …

tftp服务的搭建

TFTP服务的搭建 1 先更新一下apt包 sudo apt-get update2 服务器端(虚拟机上)安装 TFTP相关软件 sudo apt-get install xinetd tftp tftpd -y3 创建TFTP共享目录 mkdir tftp_sharetftp_shaer的路径是/home/cwz/tftp_share 3.1 修改共享目录的权限 sudo chmod -R 777 tftp…

网络基础-2

IEEE制定了一个名为GARP的协议框架,该框架协议包含了两个具体协议,GMRP和GVRP。GVRP可以大大降低VLAN配置过程中的手工的工作量。 IP本身是一个协议文件的名称,该协议主要定义阐释了IP报文的格式。 类型网络号位数网络号个数主机号位数每个…

element-ui vue2 iframe 嵌入外链新解

效果如图 实现原理 在路由中通过 props 传值 {path: /iframe,component: Layout,meta: { title: 小助手, icon: example },children: [{path: chatglm,name: chatglm,props: { name: chatglm,url: https://chatglm.cn },component: () > import(/views/iframe/common),me…

【代码思路】2023mathorcup 大数据数学建模B题 电商零售商家需求预测及库存优化问题

各位同学们好,我们之前已经发布了第一问的思路视频,然后我们现在会详细的进行代码和结果的一个讲解,然后同时我们之后还会录制其他小问更详细的思路以及代码的手把手教学。 大家我们先看一下代码这一部分,我们采用的软件是Jupyte…

DBA笔记(1)

目录 1、rpm yum 命令的使用,参数的含义 rpm命令: yum命令: 2、上传镜像至虚拟机搭建本地yum源 3、chown chomd 命令每一个参数的含义 chown命令: chmod命令: 4、fdisk partd 硬盘分区命令用法 fdisk命令&am…

Pytest单元测试框架生成HTML测试报告及优化的步骤

本文主要介绍了Pytest单元测试框架生成HTML测试报告及优化的步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一、安装插件 要生成html类型的报告,需要使用pytest-html插件,可…