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

什么是 MQTT?

什么是 MQTT?

MQTT 的全称是 Message Queuing Telemetry Transport(消息队列遥测传输协议)。简单来说,它是一种专门为物联网(IoT)设备设计的、非常轻量级的消息传递协议。

假如你有很多智能设备(比如传感器、智能灯泡、智能手表),它们需要相互通信,或者想将数据发送到一个中央服务器。这些设备通常计算能力有限、电量宝贵,并且可能处于不稳定的网络环境(比如蜂窝网络)。MQTT 就是为了解决这些挑战而生的。

一个核心比喻:

你可以把 MQTT 系统想象成一个高效的邮局系统

  • 代理(Broker):就是邮局本身。它是一个中央服务器,负责接收和分发所有消息。
  • 客户端(Client):任何连接到这个邮局的设备,比如你的手机 App、温度传感器、智能灯泡等。它们可以是发布者(Publisher),也可以是订阅者(Subscriber)
  • 主题(Topic):就像是信件上的地址。发布者将消息发送到特定的主题,订阅者则告诉邮局“我对这个地址的信件感兴趣”。
  • 发布(Publish):一个客户端(发布者)写了一封信(消息),并把它投递到邮局,信上写着一个地址(主题)。
  • 订阅(Subscribe):另一个客户端(订阅者)提前向邮局登记,说“所有寄往这个地址(主题)的信,都请给我一份复印件”。

当邮局(Broker)收到一封寄往某个地址(Topic)的信(Message)时,它会立即查看谁登记订阅了这个地址,然后把信的复印件分发给所有相关的订阅者。

MQTT 的核心特点

  1. 轻量级和高效

    • MQTT 的协议头非常小(最小只有2个字节),这使得它在网络带宽有限的情况下也能高效工作,非常节省流量和电量。
  2. 发布/订阅模式(Publish/Subscribe)

    • 这是 MQTT 的核心。与传统的客户端/服务器模式(如 HTTP 的请求/响应)不同,发布者和订阅者之间是解耦的。
    • 发布者不需要知道谁在监听它的消息,订阅者也不需要知道消息是谁发送的。它们都只与中央的代理(Broker)打交道。这种模式极大地提高了系统的灵活性和可扩展性。
  3. 为不稳定网络设计

    • MQTT 内置了多种机制来应对网络中断和不稳定的情况。
    • 服务质量(QoS):提供三种不同级别的消息传递保证。
    • 持久会话(Persistent Sessions):即使客户端掉线,Broker 也可以为其保存订阅信息和离线消息,待其重新上线后发送。
    • 遗嘱(Last Will and Testament):一个非常有趣的功能。客户端可以预先在 Broker 上设置一个“遗嘱”消息。如果客户端意外掉线(比如断电或网络故障),Broker 会自动将这个“遗嘱”消息发布到指定的主题上。这常用于通知其他设备“我掉线了”。
  4. 双向通信

    • 由于 Broker 的存在,可以轻松实现双向通信。服务器可以随时向设备推送指令,设备也可以随时向服务器上报数据。

深入了解几个关键概念

  • 主题(Topic)

    • 主题是分层级的,使用斜杠 / 分隔,非常像文件路径。例如:
      • home/living_room/temperature (客厅的温度)
      • factory/building_A/machine_1/status (A栋厂房1号机器的状态)
    • 订阅者可以使用通配符来订阅多个主题:
      • + (加号):单层通配符。home/+/temperature 可以匹配 home/living_room/temperaturehome/bedroom/temperature
      • # (井号):多层通配符。factory/building_A/# 可以匹配该栋厂房下所有设备的所有消息。
  • 服务质量(QoS - Quality of Service)
    这是 MQTT 可靠性的基石,分为三个级别:

    • QoS 0 (最多一次):消息发送出去,但不保证对方一定能收到。这也被称为“发后即忘”。速度最快,但可靠性最低。适用于可以容忍数据丢失的场景(如频繁上报的传感器数据)。
    • QoS 1 (至少一次):保证消息至少被对方收到一次。发送方会一直重发,直到收到接收方的确认(ACK)。可能会导致重复消息。适用于大多数要求消息必达的场景。
    • QoS 2 (恰好一次):通过更复杂的握手过程,保证消息既不会丢失,也不会重复,精确地只被接收一次。最可靠,但开销也最大。适用于绝对不能出错的场景(如支付指令)。
  • 保留消息(Retained Message)

    • 当发布者向一个主题发布一条“保留消息”时,Broker 会保存这条消息。当一个新的订阅者订阅该主题时,Broker 会立即将这条保留消息发送给它。
    • 这非常有用,可以让新上线的设备立即获取到某个主题的“最新状态”。例如,一个智能灯泡的状态(开/关)可以作为保留消息发布,这样手机 App 一打开就能立即知道灯是开着还是关着,而不需要等待下一次状态更新。

MQTT 的实际应用场景

MQTT 已经成为物联网领域的标准协议,应用非常广泛:

  • 智能家居:控制灯光、空调、门锁,上报温湿度。
  • 车联网:车辆状态监控、远程控制、位置追踪。
  • 工业物联网(IIoT):工厂生产线数据采集、设备监控和预警。
  • 智慧农业:土壤湿度、光照、温度等传感器数据收集。
  • 即时通讯:Facebook Messenger 早期就曾使用 MQTT 来实现低功耗的实时消息推送。
  • 可穿戴设备:智能手表、健康手环的数据同步。

总结

总而言之,MQTT 是一种为物联网而生的、基于发布/订阅模式的、轻量级的消息传递协议。 它的核心优势在于低功耗、低带宽、高可靠性以及灵活的解耦架构,使其成为连接海量资源受限设备的理想选择。如果你正在开发任何与物联网相关的项目,MQTT 几乎是你必须要了解的技术。

http://www.lqws.cn/news/529111.html

相关文章:

  • Nordic nRF52832 寄存器级 UARTE 发送实现
  • Android-Layout Inspector使用手册
  • R语言机器学习算法实战系列(二十六)基于tidymodels的XGBoost二分类器全流程实战
  • ubuntu22.04系统kubeadm部署k8s高可用集群
  • 手机屏像素缺陷修复及相关液晶线路激光修复原理
  • 简单使用python
  • Milvus 资源调度系统的核心部分:「查询节点」「资源组」「数据库」
  • gitlab https链接转为ssh链接
  • Docker 网络——AI教你学Docker
  • Vue 2 项目中内嵌 md 文件
  • Windows 下使用 nvm 管理 Node.js 多版本 —— 完整指南
  • 动态规划之01背包问题
  • 互联网医院系统源码解析:如何实现视频问诊、电子处方等核心功能?
  • 焊接与热切割作业证用途有哪些
  • 【SpringBoot】Spring Boot + RESTful 技术实战指南
  • 数据结构进阶 - 第二章 线性表
  • 缓存与加速技术实践-MongoDB数据库应用
  • React:利用计算属性名特点更新表单值
  • Spark SQL to_json 函数介绍
  • LLM复杂记忆存储-多会话隔离案例实战
  • Flink Oracle CDC 总结
  • Spring 框架
  • Python+selenium自动化生成测试报告
  • 在一个成熟产品中,如何设计数据库架构以应对客户字段多样化,确保系统的可维护性、可扩展性和高性能。
  • 智慧城市云计算大数据中心项目设计方案
  • 技术调研:时序数据库(一)
  • ASP.NET Core Web API 实现 JWT 身份验证
  • 【人工智能与机器人研究】基于ROS的多传感器融合巡检机器人系统研究
  • Android 16系统源码_无障碍辅助(二)Android 的无障碍框架
  • 人工智能中的集成学习:从原理到实战