当前位置: 首页 > 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 的轻量性和高实时性使其成为物联网领域的首选协议。

http://www.lryc.cn/news/520832.html

相关文章:

  • 【MySQL学习笔记】MySQL存储过程
  • Vue2+OpenLayers实现折线绘制、起始点标记和轨迹打点的完整功能(提供Gitee源码)
  • 基于Spring Boot的城市垃圾分类管理系统设计与实现(LW+源码+讲解)
  • linux: 文本编辑器vim
  • Eclipse Debug 调试
  • vue3+ts的<img :src=““ >写法
  • 《心血管成像的深度学习》论文精读
  • RDP、VNC、SSH 三种登陆方式的差异解析
  • 3d 可视化库 vister部署笔记
  • 操作系统八股文学习笔记
  • k8s基础(6)—Kubernetes-存储
  • K8S--配置存活、就绪和启动探针
  • 永久免费工业设备日志采集
  • 详解 Docker 启动 Windows 容器第二篇:技术原理与未来发展方向
  • HC32L136K8TA单片机输出互为反相双路PWM
  • 数据分析-55-时间序列分析之获取时间序列的自然周期时间区间
  • Java Stream流操作List全攻略:Filter、Sort、GroupBy、Average、Sum实践
  • Sentaurus TCAD学习笔记:transform指令
  • vscode支持ssh远程开发
  • Java线程详解
  • java -jar启动项目报错:XXX.jar中没有主清单属性
  • 【Vue - Element 】实现表单输入框的远程搜索功能
  • Linux(Centos 7.6)命令详解:split
  • 八股学习 Redis
  • 如何通过高防服务隐藏服务器源IP
  • 【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS
  • 借助Claude实现Playwright的自动化(MCP Server)
  • 【区间DP】【hard】力扣730. 统计不同回文子序列
  • 【Vim Masterclass 笔记11】S06L24 + L25:Vim 文本的插入、变更、替换与连接操作同步练习(含点评课)
  • 分布式组件底层逻辑是什么?