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

Linux--MQTT简介

一、简介

MQTT Message Queuing Telemetry Transport,消息队列遥测传输), 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。
与 HTTP 协议一样, MQTT 协议也是应用层协议,工作在 TCP/IP 四层模型中的最上层(应用层),构建于 TCP/IP 协议上。MQTT 最大 优点 在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

二、MQTT 的主要特性

MQTT 协议是为工作在低带宽、不可靠网络的远程传感器和控制设备之间的通讯而设计的协议,它具有以下主要的几项特性:
①、使用发布 / 订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
②、基于 TCP/IP 提供网络连接。
主流的 MQTT 是基于 TCP 连接进行数据推送的,但是同样也有基于 UDP 的版本,叫做 MQTT-SN 。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了。
③、支持 QoS 服务质量等级。
根据消息的重要性不同设置不同的服务质量等级。
④、小型传输,开销很小,协议交换最小化,以降低网络流量。
因为它开销小,所占带宽低的特性,所以适合在算力小,资源少的嵌入式设备上。
⑤、使用 will 遗嘱机制来通知客户端异常断线。
⑥、基于主题发布 / 订阅消息,对负载内容屏蔽的消息传输。
⑦、支持心跳机制。

三、开销小、带宽消耗少的原因

MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,专为低带宽、不稳定网络环境设计。它的开销小、带宽需求低的原因有以下几点:

1. 头部结构简洁

  • 固定头部:MQTT 的固定头部只有2字节,包括消息类型和标志位。对于一些简单的消息类型(例如 PINGREQ 或 DISCONNECT),固定头部就足够了,不需要额外的可变头部或负载。
  • 可变头部和负载:仅在需要时才添加,不必要时省略。这减少了数据包的总大小。

2. 协议设计轻量化

  • 简单的操作码:MQTT 的操作码和控制字段设计简单,减少了解析和处理的复杂度。
  • 低开销的消息格式:消息格式紧凑,有效载荷不包含冗余信息。仅在需要时才传输必要的数据。

3. 发布/订阅模型

  • 异步通信:发布/订阅模型允许设备在有数据时才发送消息,无需保持长时间的连接,减少了不必要的数据传输和带宽占用。
  • 减少点对点连接:一个消息发布到主题,多个订阅者可以接收,避免了多个点对点连接,减少了网络流量。

4. 保持连接机制

  • 心跳包(Keep Alive):通过心跳包机制保持连接,不频繁建立和断开连接,减少了 TCP 连接建立和断开的开销。
  • PINGREQ 和 PINGRESP:用于保持连接的消息很小,仅有固定头部。

5. QOS(Quality of Service)等级

  • QOS 0:最多一次传输,不需要确认,最小带宽消耗。
  • QOS 1:至少一次传输,需要确认,带宽消耗适中。
  • QOS 2:仅一次传输,最高保证,需要两阶段确认,带宽消耗相对较高。
  • 按需选择:用户可以根据应用需求选择合适的 QOS 等级,优化带宽使用。

6. 保留消息和遗嘱消息

  • 保留消息:服务器保留最新的消息,新的订阅者一连接就能收到,无需发送多个请求。
  • 遗嘱消息:客户端异常断开时,服务器自动发布预设的遗嘱消息,无需额外的检测和重连开销。

7. 小型消息体

  • 适用于小型消息:MQTT 适合小型消息传输,通常用于传感器数据、状态更新等小型数据包。
  • 减少数据量:通过小型数据包传输,减少了整体数据量和带宽占用。

四、补充(心跳包)

心跳包(Keep Alive)机制是 MQTT 协议的一项重要特性,用于保持客户端和服务器之间的连接。以下是对这项机制的详细解释:

心跳包机制的工作原理

  1. Keep Alive 时间间隔

    • 在 MQTT 连接建立时,客户端和服务器约定一个时间间隔,称为 Keep Alive 时间间隔(以秒为单位)。
    • 在这个时间间隔内,如果客户端没有向服务器发送任何消息,则必须发送一个 PINGREQ(心跳请求)消息。
  2. PINGREQ 和 PINGRESP

    • PINGREQ:客户端发送的心跳请求消息,通知服务器客户端仍然在线。
    • PINGRESP:服务器收到 PINGREQ 后,发送回客户端的响应,确认连接正常。

作用

  • 保持连接活跃

    • 即使客户端没有实际数据要发送,心跳包也可以确保连接不被服务器认为已断开。
    • 这对于长时间空闲但需要保持连接的设备非常重要,例如 IoT 设备。
  • 检测连接状态

    • 如果服务器在 Keep Alive 时间内未收到任何消息,包括 PINGREQ,则认为客户端已断开连接,可以采取相应的措施(例如发布遗嘱消息)。
    • 同样,客户端如果在合理时间内未收到服务器的 PINGRESP,可以认为连接出现问题,尝试重连。

优势

  • 减少频繁的连接建立和断开

    • TCP 连接的建立和断开是一个耗时且资源消耗较大的过程。
    • 通过保持长时间的稳定连接,而不是频繁建立和断开连接,可以显著减少网络资源的开销。
  • 高效的带宽利用

    • 心跳包非常小,通常只有固定的 2 字节头部,几乎不会占用带宽。
    • 通过这种方式保持连接,比重新建立连接所消耗的带宽要少得多。
  • 提高实时性

    • 保持连接的状态,使得客户端和服务器之间的通信可以在需要时立即进行,而不需要等待重新建立连接的时间。

示例

假设一个 IoT 设备需要每小时发送一次数据到服务器,而在其他时间段保持连接:

  1. 设备与服务器约定 Keep Alive 时间间隔为 60 秒。
  2. 每隔 60 秒设备发送一个 PINGREQ,服务器响应 PINGRESP。
  3. 设备在每小时的数据发送前不需要重新建立连接,可以立即发送数据。

通过这种方式,设备和服务器保持了一个稳定的连接,减少了频繁的连接建立和断开操作,降低了网络开销和资源消耗。

五、MQTT版本

目前 MQTT 主流版本有两个,分别是 MQTT3.1.1 MQTT5 MQTT3.1.1 是在 2014 10 月发布的,而 MQTT5 是在 2019 3 月发布的。虽然 MQTT3.1.1 MQTT5 在时间相差了将近五年,但是 MQTT3.1.1作为一个经典的版本,目前仍然是主流版本,能够满足大部分实际需求。
MQTT5 是在 MQTT3.1.1 的基础上进行了升级,因此 MQTT5 是完全兼容 MQTT3.1.1 的。而 MQTT5 是在 MQTT3.1.1 的基础上添加了更多的功能、补充完善 MQTT 协议。

MQTT 5.0 是在 MQTT 3.1.1 的基础上进行扩展和改进的版本,它添加了许多新的功能和特性,使协议更加完善和灵活。以下是对 MQTT 5.0 新增功能和改进的详细解释:

新增功能和改进

  1. 属性(Properties)

    • 在 MQTT 5.0 中,每个 MQTT 控制报文(例如 CONNECT、PUBLISH、SUBSCRIBE 等)可以携带一组属性。这些属性提供了额外的元数据,可以用于控制消息的行为、传递额外的信息等。
    • 例如,PUBLISH 报文可以包含消息过期间隔(Message Expiry Interval)、内容类型(Content Type)等属性。
  2. 改进的错误报告

    • MQTT 5.0 引入了更多的返回码,使得错误报告更加具体和详细。
    • 客户端和服务器可以在不同情况下返回不同的错误码,帮助诊断和处理错误。
  3. 共享订阅(Shared Subscriptions)

    • 支持多个客户端共享一个订阅。这对于负载均衡非常有用,消息可以分发到多个订阅者中,而不是每个订阅者都接收到相同的消息。
  4. 会话过期间隔(Session Expiry Interval)

    • 允许客户端在断开连接后指定会话的过期间隔。在指定的时间内,客户端可以重新连接并恢复之前的会话状态(如订阅和未传递的消息)。
  5. 消息过期间隔(Message Expiry Interval)

    • 消息可以设置一个过期间隔。如果消息在这个时间内没有被传递,消息将被丢弃。这对于时间敏感的消息非常有用。
  6. 请求/响应模式(Request/Response Pattern)

    • 支持直接在 MQTT 协议中实现请求/响应模式,客户端可以请求并等待响应,而不是单纯的发布和订阅。
  7. 用户属性(User Properties)

    • 允许用户在消息中添加自定义属性。这些属性可以包含任何用户定义的键值对,提供了更大的灵活性。
  8. 流量控制(Flow Control)

    • 引入了流量控制机制,通过设置最大消息量(Maximum Packet Size)和请求限速(Request Rate Limiting)来管理和控制消息的流量,防止网络拥塞和过载。
  9. 增强的订阅选项(Subscription Options)

    • 订阅选项更加丰富,例如可以设置是否保留消息(Retain Handling)、指定的 QOS 等级等。
  10. 断开连接原因码(Disconnect Reason Codes)

    • 当客户端或服务器断开连接时,可以提供具体的断开原因码,帮助诊断和处理连接问题。

举例说明

假设有一个 IoT 环境中的温度传感器网络,MQTT 5.0 的一些新特性可以提供以下优势:

  1. 属性(Properties)

    • 在发布温度数据时,传感器可以在 PUBLISH 报文中包含内容类型(例如 application/json)和消息过期间隔(例如 60 秒)。
  2. 改进的错误报告

    • 如果订阅失败,服务器可以返回详细的错误码,说明订阅失败的具体原因。
  3. 共享订阅

    • 多个监控系统客户端可以共享一个温度数据的订阅,服务器将消息负载均衡到各个监控客户端。
  4. 会话过期间隔

    • 当传感器设备临时掉线后重新连接,可以恢复之前的会话状态,而不需要重新订阅所有主题。
  5. 请求/响应模式

    • 监控系统可以请求某个传感器的数据,并在同一连接上接收到响应,而不是通过发布/订阅方式间接获取数据。

总结

MQTT 5.0 在 MQTT 3.1.1 的基础上增加了许多新功能和改进,使协议更加灵活、健壮和适应现代物联网应用的需求。这些改进包括属性机制、改进的错误报告、共享订阅、会话和消息的过期间隔、用户自定义属性、流量控制、增强的订阅选项以及具体的断开原因码等。通过这些特性,MQTT 5.0 提供了更强的可扩展性和可管理性,适用于更加复杂和多样化的应用场景。

相关文章:

Linux--MQTT简介

一、简介 MQTT ( Message Queuing Telemetry Transport,消息队列遥测传输), 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。 与 HTTP 协议一样, MQTT 协议也是应用层协议,工作在 TCP/IP 四…...

VMware Workerstation开启虚拟机后,产生乱码名称日志文件

问题情况 如下图所示,我的虚拟机版本是16.1.2版本,每次在启动虚拟机之后,D盘目录下都会产生一个如图下所示的乱码名称文件。同时,虚拟机文件目录也是杂乱不堪,没有按照一台虚拟机对应一个文件夹的形式存在。 问题处理…...

Unity射击游戏开发教程:(27)创建带有百分比的状态栏

创建带有弹药数和推进器百分比的状态栏 在本文中,我将介绍如何创建带有分数和百分比文本的常规状态栏。 由于 Ammo Bar 将成为 UI 的一部分,因此我们需要向 Canvas 添加一个空的 GameObject 并将其重命名为 AmmoBar。我们需要一个文本和两个图像对象,它们是 AmmoBar 的父级。…...

Linux内存从0到1学习笔记(8.16 SMMU详解)---更新中

写在前面 前面博客已经了解过。SMMU是IOMMU在ARM架构上的实现。主要为了解决虚拟化环境中,GuestOS无法直接将连续的物理地址分配给硬件的问题。对于Hypervisor/GuestOS的虚拟化系统来说,所有的VM都运行在Hypervisor上,每一个VM独立运行一个O…...

标准盒模型和怪异盒模型的区别

CSS盒模型: 内容区(content)内边距(padding)边框(border)外边距(margin) 分为标准盒模型和IE盒模型/怪异盒模型 为了正确设置元素在所有浏览器中的宽度和高度&#xf…...

【第8章】如何利用ControlNet生成“可控画面”?(配置要求/一键安装/快速上手/生成第一张图)ComfyUI基础入门教程

这节我们来讲AI绘画领域中一个很重要的概念:ControlNet,看下如何让生成的画面更可控。 🎅什么是ControlNet? Stable Diffusion中的ControlNet是一种神经网络结构,它允许将额外的条件输入添加到预训练的图像扩散模型中,通过这种方式,ControlNet可以控制图像生成过程,…...

[qt] qt程序打包以及docker镜像打包

目录 一 环境准备: 1.1 qt环境 1.2 linuxdeplouqt打包工具 二 qt包发布: 2.1 搜索链接库 2.2 应用程序APP打包 2.3 发布 三 docker镜像包发布 3.1 环境准备 3.2 镜像生产脚本 3.3 加载镜像并运行docker容器 四 补充 4.1 时间不同步问题解决 一 环境准备: qt环境l…...

电脑屏幕监控软件有哪些?2025年监控软件排行榜

电脑屏幕监控软件有哪些?2025年监控软件排行榜 虽然现在还是2024年,但是有一些被广泛讨论和推荐的电脑屏幕监控软件,它们将在2025年异军突起,成为行业的引领者。 1.安企神软件: 功能全面的电脑屏幕监控软件&#xf…...

音视频主要概念

文章目录 常用的一些概念主要概念1主要概念2I帧P帧B帧 常用视频压缩算法 小结 常用的一些概念 主要概念1 视频码率:kb/s,是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数…...

AIGC全面介绍

AIGC(Artificial Intelligence and General Competitions)是一个专注于人工智能和综合能力竞赛的组织。AIGC的目标是促进人工智能和综合能力的发展,并为相关领域的学术研究和应用创新提供支持和平台。 AIGC主要致力于人工智能竞赛的组织、举…...

vscode中模糊搜索和替换

文章目录 调出搜索(快捷键)使用正则(快捷键)替换(快捷键)案例假设给定文本如下目标1:查找所有函数名目标2:替换所有函数名为hello目标3:给url增加查询字符串参数 调出搜索…...

人工智能入门学习教程分享

目录 1.首先安装python,官网地址:Download Python | Python.org,进入网址,点击Windows链接 2.下载完成之后,进行傻瓜式安装,如果不选安装路径,默认会安装到C:\Users\Administrator\AppData\Local\Programs\Python\Python38目录下。 3.配置python环境变量,即把python的…...

Django序列化器详解:普通序列化器与模型序列化器的选择与运用

系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游&#xff…...

Commons-io工具包与Hutool工具包

Commons-io Commons-io是apache开源基金组织提供的一组有关IO操作的开源工具包 作用:提高I0流的开发效率。 FileUtils类(文件/文件夹相关) static void copyFile(File srcFile,File destFile) 复制文件 static void copyDirectory(File srcDir,File destDir) 复…...

ROS中Twist消息类型

Twist消息类型在Robot Operating System (ROS)中是一个常见的数据结构,主要用于描述物体的线性速度和角速度。这种消息类型在ROS的geometry_msgs包中定义,常用于机器人运动控制,尤其是当需要向机器人发布速度指令时。 Twist消息由两个Vector…...

Pixi.js学习 (四)鼠标跟随、元素组合与图片位控

目录 一、鼠标移动跟随 1.1 获取鼠标坐标 1.2 鼠标跟随 二、锚点、元素组合 2.1 锚点 2.2 元素组合 三、图片图层 四、实战 例题一:完成合金弹头人物交互 例题二:反恐重击瞄准和弹痕 例题一代码: 例题二代码: 总结 前言 为了提高作…...

Golang | Leetcode Golang题解之第139题单词拆分

题目&#xff1a; 题解&#xff1a; func wordBreak(s string, wordDict []string) bool {wordDictSet : make(map[string]bool)for _, w : range wordDict {wordDictSet[w] true}dp : make([]bool, len(s) 1)dp[0] truefor i : 1; i < len(s); i {for j : 0; j < i;…...

简单聊一下Oracle,MySQL,postgresql三种锁表的机制,行锁和表锁

MySQL&#xff1a; MySQL使用行级锁定和表级锁定。行级锁定允许多个会话同时写入表&#xff0c;适用于多用户、高并发和OLTP应用。表级锁定只允许一个会话一次更新表&#xff0c;适用于只读、主要读取或单用户应用。 比如mysql开启一个窗口执行 begin; update xc_county_a…...

Python的网络请求

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在上一节中多次提到了URL地址与下载网页&#xff0c;这两项是网络爬虫必备而又关键的功能&#xff0c;说到这两个功能必然会提到HTTP。本节将介绍在P…...

[Shell编程学习路线]——探讨Shell中变量的作用范围(export)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月14日10点14分 &#x1f004;️文章质量&#xff1a;95分 文章目录 ————前言———— 定义变量&#xff1a; 输出变…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...