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

MQTT协议(消息队列遥测传输)

MQTT协议

MQTT是一种极其轻量级的消息传输协议,专为低带宽、高延迟或不稳定的网络环境(如物联网IoT)而设计,它采用发布/订阅模式,非常适合 设备与服务器之前的通信。

一、MQTT是什么

MQTT 的全称是 Message Queuing Telemetry Transport(消息队列遥测传输)。

   Message Queuing: 最初与 IBM 的 WebSphere MQ(一种消息队列产品)集成。

   Telemetry Transport: 主要用于远程监测和传输数据(遥测)。

它由 IBM 的 Andy Stanford-Clark 和 Arcom(现为 Cirrus Link)的 Arlen Nipper 在 1999 年发明,最初用于通过卫星连接石油管道传感器。现在,它已成为 OASIS 标准,是物联网领域最主流的通信协议。

 

二、核心特点和设计理念

  1. 极度轻量且高效:
    • 协议头非常小(最小只有 2 字节),最大限度地减少了网络带宽消耗。
    • 消息内容可以被有效编码,减少传输数据量。

 

  1. 基于发布/订阅(Pub/Sub)模式:
    • 在 C/S 模式中,客户端直接与特定的服务器地址通信。而在 Pub/Sub 模式中,通信由一个代理服务器(Broker)中转。
    • 发布者(Publisher):负责产生并发送消息的客户端(例如,一个温度传感器)。
    • 订阅者(Subscriber):负责接收消息的客户端(例如,一个手机App或服务器)。
    • 主题(Topic): 消息的分类标识符,类似于一个“频道”或“地址”。发布者和订阅者都通过主题来路由消息,而不需要知道彼此的存在。例如,传感器可以向主题 `home/livingroom/temperature` 发布温度数据,而任何订阅了这个主题的客户端都会收到数据。

 

  1. 对不稳定网络的友好支持:
  • MQTT 提供了服务质量(QoS)等级,允许开发者根据场景在“传输可靠性”和“网络负载”之间进行权衡:
    • QoS 0(最多一次): 消息最多交付一次,可能会丢失。速度最快。
    • image
    • QoS 1(至少一次): 消息至少交付一次,但可能会重复。
    • image
    • QoS 2(确保一次): 消息确保只交付一次。最可靠,但也最慢。为此,带有唯一消息 ID 的消息会存储两次,首先来自发送者,然后是接收者。QoS 级别 2 在网络中具有最高的开销,因为在发送方和接收方之间需要两个流
    • image
  1. 持久会话与遗嘱消息:
    • 持久会话: 客户端可以要求 Broker 保存其订阅信息和可能错过的消息(当它离线时),以便重连后恢复,减少重复通信的开销。
    • 遗嘱消息(Last Will and Testament, LWT): 客户端在连接时可以设置一个“遗嘱”。如果它意外断开连接(例如网络故障),Broker 会自动代表它向指定主题发布这条遗嘱消息,通知其他设备该客户端异常离线了。

三、核心概念与工作流程

  1.  MQTT 代理(Broker):
    •   这是整个协议的核心,是一个服务器(例如 `mqtt.eclipse.org` 或 `test.mosquitto.org` 是公共测试 Broker)。
    •   所有客户端都连接到 Broker。
    •   负责接收发布者的消息,并根据主题将其转发给所有订阅了该主题的订阅者。
  1.  MQTT 客户端:
    •   任何运行 MQTT 库的设备或应用,可以是发布者、订阅者,或两者皆是。
    •   从微控制器(如 Arduino)到大型服务器、手机App,都可以是 MQTT 客户端。
  1.  工作流程:
    1.  所有客户端(发布者和订阅者)都与 Broker 建立连接。
    2.  订阅者向 Broker 订阅它感兴趣的主题(例如 `sensor/temperature`)。
    3.  发布者向 Broker 的某个主题发布一条消息。
    4.  Broker 收到消息后,会立即将其转发给所有订阅了该主题的客户端(订阅者)。
    5.  发布者和订阅者之间完全解耦,互不知晓对方的存在。

 

四、主要优点

   低功耗:适用于电池供电的设备。

   带宽占用少:适合窄带物联网(NB-IoT)等按数据流量计费的网络。

   实时性好:消息推送延迟低。

   语言和平台无关性:有各种编程语言(C, C++, Java, Python, JavaScript...)的实现库。

   可扩展性强:一个 Broker 可以轻松连接成千上万的客户端。

 

五、典型应用场景

1、物联网(IoT): 智能家居(控制灯光、空调,接收传感器数据)、智能农业、工业 4.0(设备监控)。

2、移动应用: 聊天App、推送通知。

3、车联网(V2X): 车辆与基础设施之间的通信。

4、即时通讯: 虽然不常见,但也可以用于构建简单的聊天应用。

 

MQTT 是一个为资源受限环境分布式系统而生的高效、异步消息通信协议。其发布/订阅模式服务质量等级使其成为物联网设备间通信的事实标准,完美解决了在不稳定网络中高效、可靠传输数据的问题。在物联网中很常见。

http://www.hskmm.com/?act=detail&tid=13335

相关文章:

  • 如何构建embeding 的就是pytorch 中
  • 萤石设备视频接入平台EasyCVR国标GB28181视频平台整合铁路抑尘喷洒智能视频监控方案
  • 【低代码平台之应用构建展示】数智化贸易订单管理平台
  • C# 第 17天 028 029接口,依赖反转,单元测试
  • 2025年项目管理软件革命:AI与空间计算如何重塑企业协作范式
  • Threading 串行VS并发
  • parallel index
  • C语言 第三讲:分支和循环(上) - 教程
  • 中间件专题:Redis
  • 微信个人号开发API/文档/教程
  • 微指令控制器基本原理
  • 一个拒绝过度设计的 .NET 快速开发框架:开箱即用,专注干活
  • 个人微信号二次开发API调用、微信API接口
  • 2025.9.21+7 [未完]
  • VisualStudio-Python-工具指南-全-
  • Gevent和Subprocess问题
  • Ansible自动化运维实战 - 详解
  • 建筑行业能源管理破局:MyEMS 打造商业楼宇 “能耗可视化 + 智能调控” 方案
  • 【数据结构】双向链表 - 指南
  • 告别“能源糊涂账”:MyEMS如何帮企业把能耗数据“算明白、用到位”
  • Windows 离线环境下使用 VS Code 连接容器 Python 环境完整指南(亲测可用)
  • Macos 安装kali报错
  • 完整教程:线程、进程、协程
  • CF913G Power Substring
  • YC大佬分享的 10 个 vibe coding技巧,看完收获巨大
  • ES集群部署-EFK架构实战 - 实践
  • 《BOE解忧实验室》第四季圆满收官 以科技重塑文化生活新范式
  • 洛谷P2261 [CQOI2007] 余数求和
  • arc206 总结
  • 科研必读|提升酿酒酵母表达蛋白产量的关键技术