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

MQTT(Message Queuing Telemetry Transport)协议

文章目录

    • 一、MQTT 的原理
      • 1. 通信模型
      • 2. 核心概念
      • 3. 工作流程
    • 二、MQTT 的优势
      • 1. 轻量级
      • 2. 异步通信
      • 3. 可靠性
      • 4. 实时性
      • 5. 支持断线重连
      • 6. 跨平台支持
      • 7. 安全性
    • 三、MQTT 的典型应用场景
    • 四、与其他协议的对比

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,专为低带宽、不稳定网络环境下的设备通信设计,广泛应用于物联网(IoT)领域。


一、MQTT 的原理

1. 通信模型

MQTT 基于 发布/订阅(Publish/Subscribe) 模型,而不是传统的请求/响应模型:

  • 发布者(Publisher):生产消息并将其发布到某个主题(Topic)。
  • 订阅者(Subscriber):订阅一个或多个主题,接收发布到这些主题的消息。
  • 代理(Broker):消息中介,负责接收发布者的消息并将其分发给订阅者。

2. 核心概念

  • 主题(Topic):用于分类消息的通道,消息按照主题进行路由。主题可以是多级结构(如 home/room1/temperature)。
  • QoS(质量服务等级)
    • QoS 0: 最多一次,消息可能丢失。
    • QoS 1: 至少一次,确保消息到达但可能重复。
    • QoS 2: 恰好一次,确保消息到达且不重复。
  • 保留消息(Retained Message):代理保存的最近一条消息,新订阅者能立刻接收。
  • 遗嘱消息(Last Will Message):设备异常断开时,代理代发的消息。

3. 工作流程

  1. 连接:客户端通过 TCP(或 WebSocket)连接到 Broker。
  2. 认证:可通过用户名和密码进行身份验证。
  3. 订阅:客户端订阅主题,Broker 记录该订阅关系。
  4. 发布:发布者将消息发送到特定主题,Broker 根据订阅关系分发消息。
  5. 断开:客户端主动断开或超时断开。

二、MQTT 的优势

1. 轻量级

  • 消息头部非常小(2 字节起),适合低带宽网络。
  • 协议简单易实现,资源占用少,适合嵌入式设备。

2. 异步通信

  • 发布/订阅模型支持松耦合,通信双方无需直接连接,提供高灵活性。

3. 可靠性

  • 提供 3 种 QoS 等级,用户可根据场景选择消息传输的可靠性。

4. 实时性

  • 支持长连接,消息实时推送,适合物联网中对延迟敏感的应用。

5. 支持断线重连

  • 客户端掉线后可自动重新连接,遗嘱消息机制保障异常断开时的信息通知。

6. 跨平台支持

  • 可在多种设备和操作系统上实现,具有广泛的生态支持。

7. 安全性

  • 支持 TLS 加密和基于用户名/密码的身份认证,增强传输安全性。

三、MQTT 的典型应用场景

  1. 智能家居
    • 设备状态更新(如灯的开关状态)。
    • 传感器数据上传(如温湿度监测)。
  2. 工业物联网
    • 设备远程监控和数据采集。
    • 设备报警通知。
  3. 车联网
    • 实时位置跟踪。
    • 远程车辆控制。
  4. 移动应用
    • 实时消息推送(如聊天应用)。
  5. 医疗健康
    • 健康监测设备的数据上传和报警。

四、与其他协议的对比

特性MQTTHTTPCoAP
模型发布/订阅请求/响应请求/响应
资源消耗非常低
传输协议TCP(可用 TLS 加密)TCP(可用 HTTPS)UDP(支持 DTLS 加密)
实时性
可靠性可选 QoS默认可靠默认不可靠

MQTT 的轻量性和高实时性使其成为物联网领域的首选协议。

相关文章:

MQTT(Message Queuing Telemetry Transport)协议

文章目录 一、MQTT 的原理1. 通信模型2. 核心概念3. 工作流程 二、MQTT 的优势1. 轻量级2. 异步通信3. 可靠性4. 实时性5. 支持断线重连6. 跨平台支持7. 安全性 三、MQTT 的典型应用场景四、与其他协议的对比 MQTT(Message Queuing Telemetry Transport)…...

【MySQL学习笔记】MySQL存储过程

存储过程 1、基础语法2、变量2.1 系统变量2.2 用户自定义变量2.3 局部变量 3、if 流程控制4、参数5、case 流程控制6、循环结构6.1 while 循环6.2 repeat 循环6.3 loop 循环 7、游标 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以…...

Vue2+OpenLayers实现折线绘制、起始点标记和轨迹打点的完整功能(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、代码实现 3.1、HTML页面 3.2、初始化变量 3.3、创建起始点位 3.4、遍历轨迹点 3.5、画折线 3.6、初始化弹窗信息 3.7、初始化地图上标点的点击事件 3.8、完整代码 四、Gitee源码 一、案例截图 二、安装OpenLayers库 n…...

基于Spring Boot的城市垃圾分类管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...

linux: 文本编辑器vim

文本编辑器 vi的工作模式 (vim和vi一致) 进入vim的方法 方法一:输入 vim 文件名 此时左下角有 "文件名" 文件行数,字符数量 方法一: 输入 vim 新文件名 此时新建了一个文件并进入vim,左下角有 "文件名"[New File] 灰色的长方形就是光标,输入文字,左下…...

Eclipse Debug 调试

关于Eclipse的Debug调试功能,有几点重要的信息可以分享。 Debug的启动方式:Eclipse提供了多种启动程序调试的方式,包括通过菜单(Run –> Debug)、点击“绿色臭虫”图标、右键选择Debug As以及使用快捷键(F11)【0†source】。 调试中最常用…...

vue3+ts的<img :src=““ >写法

vue3ts的<img :src"" >写法<img :src"datasetImage" alt"数据分布示意图" /><script setup lang"ts">const datasetImage ref();datasetImage.value new URL(../../../assets/images/login-background.jpg, impo…...

《心血管成像的深度学习》论文精读

Deep Learning for Cardiovascular Imaging 重要性&#xff1a;由深度学习 (DL) 的进步推动的人工智能 (AI) 有可能重塑心血管成像 (CVI) 领域。虽然 CVI 的 DL 仍处于起步阶段&#xff0c;但研究正在加速&#xff0c;以帮助获取、处理和/或解释各种模式下的 CVI&#xff0c;其…...

RDP、VNC、SSH 三种登陆方式的差异解析

一、引言 在计算机系统管理和远程访问的领域中&#xff0c;RDP&#xff08;Remote Desktop Protocol&#xff0c;远程桌面协议&#xff09;、VNC&#xff08;Virtual Network Computing&#xff0c;虚拟网络计算&#xff09;和 SSH&#xff08;Secure Shell&#xff09;是三种广…...

3d 可视化库 vister部署笔记

目录 vister 开源地址: python版本: 在python3.10以上版本安装 viser, 测试ok的案例: 立方体mesh选中 SMPL-X可视化 ok 推理代码: vister 开源地址: GitHub - nerfstudio-project/viser: Web-based 3D visualization + Python python版本: 在python3.10以上版本…...

操作系统八股文学习笔记

总结来自于javaguide,本文章仅供个人学习复习 javaguide操作系统八股 文章目录 操作系统基础什么是操作系统?操作系统主要有哪些功能?常见的操作系统有哪些?用户态和内核态为什么要有用户态和内核态?只有一个内核态不行嘛?用户态和内核态是如何切换的?系统调用 进程和线程…...

k8s基础(6)—Kubernetes-存储

Kubernetes-存储概述 k8s的持久券简介 Kubernetes的持久卷&#xff08;PersistentVolume, PV&#xff09;和持久卷声明&#xff08;PersistentVolumeClaim, PVC&#xff09;为用户在Kubernetes中使用卷提供了抽象。PV是集群中的一块存储&#xff0c;PVC是对这部分存储的请求。…...

K8S--配置存活、就绪和启动探针

目录 1 本人基础环境2 目的3 存活、就绪和启动探针介绍3.1 存活探针3.2 就绪探针3.3 启动探针 4 探针使用场景4.1 存活探针4.2 就绪探针4.3 启动探针 5 配置存活、就绪和启动探针5.1 定义存活探针5.2 定义一个存活态 HTTP 请求接口5.3 定义 TCP 的就绪探针、存活探测5.4 定义 g…...

永久免费工业设备日志采集

永久免费: <下载> <使用说明> 用途 定时全量或增量采集工控机,电脑文件或日志. 优势 开箱即用: 解压直接运行.不需额外下载.管理设备: 后台统一管理客户端.无人值守: 客户端自启动,自更新.稳定安全: 架构简单,兼容性好,通过授权控制访问. 架构 技术架构: Asp…...

详解 Docker 启动 Windows 容器第二篇:技术原理与未来发展方向

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言所遇问题问题 1&#xff1a;Docker 容器启动的 Windows 实例调用了 KVM 驱动&#xff0c;但为什么用 virsh list 命令查不到虚拟机&#xff1f;这意味着它不是一…...

HC32L136K8TA单片机输出互为反相双路PWM

可这里可以参考stm32的代码看看 HC32L136K8TA的机制跟32差不多 以使用一个通用定时器输出两路互为反相的 PWM 波&#xff0c;但需要通过一定的配置技巧实现。与高级定时器&#xff08;如 STM32 的 TIM1、TIM8 等&#xff09;不同&#xff0c;通用定时器通常没有直接的互补输出…...

数据分析-55-时间序列分析之获取时间序列的自然周期时间区间

文章目录 1 获取某年的总天数1.1 get_year_days()1.2 应用函数2 获取某年的总周数2.1 get_year_weeks()2.2 应用函数3 获取某日期属于某年的周数3.1 get_time_yearweek()3.2 应用函数4 获取某年某周的开始时间和结束时间4.1 get_week_start_end()4.2 应用函数5 获取往前num周期…...

Java Stream流操作List全攻略:Filter、Sort、GroupBy、Average、Sum实践

在Java 8及更高版本中&#xff0c;Stream API为集合处理带来了革命性的改变。本文将深入解析如何运用Stream对List进行高效的操作&#xff0c;包括筛选&#xff08;Filter&#xff09;、排序&#xff08;Sort&#xff09;、分组&#xff08;GroupBy&#xff09;、求平均值&…...

Sentaurus TCAD学习笔记:transform指令

目录 一、transform指令简介二、transform指令的实现1.cut指令2.flip指令3.rotate指令4.stretch指令5.translate指令6.reflect指令 三、transform指令示例 一、transform指令简介 在Sentaurus中&#xff0c;如果需要对器件进行翻转、平移等操作&#xff0c;可以通过transform指…...

vscode支持ssh远程开发

文章目录 一、生成ssh使用的公钥/密钥对二、使用vscode通过ssh连接服务器1.安装插件2.配置文件3.连接服务器4.新建文件夹&#xff0c;存放不同的任务5.为不同的项目选择不同的conda环境 三、使用scp命令与服务器互传文件、文件夹1.检查Windows 系统是否支持scp命令2.在Windows系…...

零基础小白必看!PyTorch 2.6 镜像一键部署,开箱即用

零基础小白必看&#xff01;PyTorch 2.6 镜像一键部署&#xff0c;开箱即用 1. 为什么选择PyTorch 2.6镜像&#xff1f; PyTorch作为当前最流行的深度学习框架之一&#xff0c;其2.6版本带来了多项性能优化和新特性。但对于初学者来说&#xff0c;手动配置PyTorch环境往往是个…...

飞书集成全攻略:OpenClaw+Qwen3-4B-Thinking打造智能工作台

飞书集成全攻略&#xff1a;OpenClawQwen3-4B-Thinking打造智能工作台 1. 为什么选择OpenClawQwen3-4B-Thinking组合&#xff1f; 去年夏天&#xff0c;当我第一次尝试用AI自动化处理会议纪要时&#xff0c;经历了从兴奋到沮丧的全过程。当时使用的是某商业SaaS方案&#xff…...

在Ubuntu中通过命令行下载和安装Android Studio最新版本

在Ubuntu中通过命令行下载和安装Android Studio最新版本&#xff0c;有以下几种方法&#xff1a; 方法一&#xff1a;直接下载官方最新版本&#xff08;推荐&#xff09; 1. 安装Java JDK依赖 sudo apt update sudo apt install openjdk-11-jdk -y2. 安装64位系统所需的32位库 …...

Embedded Coder实战:5分钟搞定PID控制器的C代码生成(附完整配置流程)

Embedded Coder实战&#xff1a;5分钟搞定PID控制器的C代码生成&#xff08;附完整配置流程&#xff09; 在工业自动化领域&#xff0c;PID控制器就像一位不知疲倦的调节大师&#xff0c;默默维持着无数设备的稳定运行。想象一下&#xff0c;当你需要将这套经典算法部署到资源有…...

代码随想录算法第五十三天| KamaCoder110字符串迁移、KamaCoder105有向图的完全联通、KamaCoder106海岸线的计算

KamaCoder 110 字符串迁移 题目链接&#xff1a;110.字符串迁移 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a; 字符串迁移 思路与感想&#xff1a;直接卡在读懂题意这一关了&#xff0c;我还纳闷输出结果怎么跟自己理解的差那么多。卡哥讲完之后才明白题目的推导过程…...

LLM 是怎么学习的?训练过程大揭秘

系列&#xff1a;大语言模型原理科普&#xff08;5 篇&#xff09; 本篇&#xff1a;第 2 篇 难度&#xff1a;⭐⭐ 零基础 浅显技术 字数&#xff1a;约 9000 字 阅读时间&#xff1a;20 分钟&#x1f4d6; 开篇&#xff1a;LLM 不是生来就懂 想象一下&#xff0c;你刚出生的…...

盈鹏飞T527评估板AHD摄像头实战:从硬件连接到QT界面调试全流程

盈鹏飞T527评估板AHD摄像头全流程开发指南&#xff1a;从硬件对接到QT界面优化 在嵌入式视觉系统开发中&#xff0c;AHD摄像头因其长距离传输优势成为安防、工业检测等场景的首选。盈鹏飞T527评估板搭载全志T527处理器&#xff0c;通过TP2815转换板实现四路AHD摄像头接入&#…...

【AI实战项目】项目四:文本匹配技术深度实践与应用

分享一个大牛的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;希望你也加入到人工智能的队伍中来&#xff01;请轻击人工智能教程​​​​https://www.captainai.net/troubleshooter 项目背景&#xff1a; 在智能交互与信息检索领域&#xff0c…...

微信小程序助力老年智能评估,Pillow高级实战案例:图像处理的进阶应用。

基于微信小程序的关爱老年人在线能力评估系统设计 系统背景与意义 随着老龄化社会进程加速&#xff0c;老年人能力评估成为养老服务的重要环节。传统纸质评估方式效率低、数据难留存。基于微信小程序的在线评估系统可实现便捷化、标准化评估&#xff0c;提升养老服务智能化水平…...

杰理之开mic关mic复位问题处理【篇】

开PC模式...