开源技术小栈开源技术小栈
🌐 Home
⛄ 精选文章
🐜 数据库
Ⓜ️ 微服务
📺 Bilibili
🐳 Github
🎃 腾讯云社区
💫 博客园
  • 💫 Git
  • 🐜 Linux
  • 🕸️ Docker
  • 🐌 Jenkins
🌐 Home
⛄ 精选文章
🐜 数据库
Ⓜ️ 微服务
📺 Bilibili
🐳 Github
🎃 腾讯云社区
💫 博客园
  • 💫 Git
  • 🐜 Linux
  • 🕸️ Docker
  • 🐌 Jenkins
  • 0X01 2025

    • 🔶 大模型编程0X01 | 调用 API 完成内容分类
    • 🔶 PHP8.5 新增管道操作符
    • 🔶 Redis搭建高并发电商秒杀系统
    • 🔶 MQTT与PHP使用实时消息传递指南
    • 🔶 MQTT消息协议初学者指南
  • 0X01 2024

    • 🔷 SaaS多租户架构数据源动态切换解决方案
    • 🔶 HTTP分块Chunk传输让客户端响应更迅速数据
    • 🔷 PHP使用JSONSchema进行API模式验证和类型检查
    • 🔶 PHP日志管理神器Monolog
    • 🔷 使用PHP创建和管理自己的JWT令牌
    • 🔶 谁说PHP不能异步和并行运行?
    • 🔷 webman使用RabbitMQ消息中间件实现系统异步解耦实战教程
    • 🔶 基于Websocket和Canvas实现多人协作实时共享白板
    • 🔶 PHP高性能纯协程网络通信引擎Swow
    • 🔶 webman如何使用swoole事件驱动和协程?
    • 🔶 高性能PHP框架webman协程插件入门实战
    • 🔶 编译PHP 8.3并快速启动ThinkPHP 8.0框架项目
    • 🔶 【转载】漫谈Swoole协程与异步IO

MQTT消息协议初学者指南

在快速发展的物联网世界中,高效的设备通信至关重要,而 MQTT 是实现这一目标的协议。本指南将深入探讨 MQTT,这是一种专为低带宽、高延迟网络设计的轻量级发布-订阅协议。我们将引导您了解 MQTT 的基础知识、其关键概念及其实际应用。本指南以专家见解和实践示例为后盾,是您掌握 MQTT 和提升物联网项目的首选资源。

什么是 MQTT?

MQTT(消息队列遥测传输)是一种轻量级的、基于发布-订阅的消息传递协议,专为资源受限的设备和低带宽、高延迟或不可靠的网络而设计。它广泛应用于物联网 (IoT) 应用,提供传感器、执行器和其他设备之间的高效通信。

为什么 MQTT 是物联网的最佳协议?

MQTT 因其针对物联网系统的特定需求量身定制的独特特性和功能而成为最好的物联网协议之一。一些关键原因包括:

  • 轻量级:物联网设备通常在处理能力、内存和能耗方面受到限制。MQTT 的最小开销和小数据包大小使其成为这些设备的理想选择,因为它消耗的资源更少,即使在功能有限的情况下也能实现高效通信。
  • 可靠性:物联网网络可能会遇到高延迟或连接不稳定的情况。MQTT 对不同 QoS 级别、会话感知和持久连接的支持确保即使在具有挑战性的条件下也能可靠地传递消息,使其非常适合物联网应用。
  • 安全通信: 安全性在物联网网络中至关重要,因为它们经常传输敏感数据。MQTT 支持传输层安全(TLS)和安全套接字层(SSL)加密,确保数据在传输过程中的机密性。此外,它还通过用户名/密码凭据或客户端证书提供身份验证和授权机制,保护对网络及其资源的访问。
  • 双向性:MQTT 的发布-订阅模型允许设备之间的无缝双向通信。客户端既可以向主题发布消息,也可以订阅接收特定主题的消息,从而在不同的物联网生态系统中实现有效的数据交换,而无需设备之间直接耦合。该模型还简化了新设备的集成,确保易于扩展。
  • 连续的有状态会话:MQTT 允许客户端维护与代理的有状态会话,使系统即使在断开连接后也能记住订阅和未传递的消息。客户端还可以在连接期间指定保持连接间隔,这会提示代理定期检查连接状态。如果连接丢失,代理将存储未传递的消息(取决于 QoS 级别),并在客户端重新连接时尝试传递这些消息。此功能可确保可靠的通信并降低因间歇性连接而导致数据丢失的风险。
  • 大规模物联网设备支持: 物联网系统通常涉及大量设备,需要能够处理大规模部署的协议。MQTT 的轻量级特性、低带宽消耗和资源高效利用使其非常适合大规模物联网应用。发布-订阅模式允许 MQTT 有效扩展,因为它将发送方和接收方解耦,从而减少网络流量和资源使用。此外,该协议支持不同的 QoS 级别,允许根据应用程序的要求定制消息传递,确保在各种场景下实现最佳性能。
  • 语言支持: 物联网系统通常包括使用各种编程语言开发的设备和应用程序。MQTT 广泛的语言支持可以轻松与多个平台和技术集成,从而促进不同物联网生态系统中的无缝通信和互作性。您可以访问我们的 MQTT 客户端编程博客系列,了解如何在 PHP、Node.js、Python、Golang、Node.js 和其他编程语言中使用 MQTT。

MQTT 如何工作?

MQTT 通过发布-订阅模式运行,其中 MQTT 客户端将消息发布到特定主题或订阅主题以接收消息,所有这些都由 MQTT 代理管理,该代理确保根据指定的 QoS(服务质量)级别传递消息。

MQTT 客户端

任何运行 MQTT 客户端库的应用程序或设备都是 MQTT 客户端。例如,使用 MQTT 的即时通讯应用程序是客户端,使用 MQTT 上报数据的各种传感器是客户端,各种 MQTT 测试工具也是客户端。

MQTT 代理

MQTT 代理处理客户端连接、断开连接、订阅和取消订阅请求以及路由消息。强大的 MQTT 代理可以支持海量连接和百万级消息吞吐量,帮助物联网服务商专注于业务,快速创建可靠的 MQTT 应用。

发布-订阅模式

发布-订阅模式与客户端-服务器模式的不同之处在于,它将发送消息的客户端(发布者)与接收消息的客户端(订阅者)分开。发布者和订阅者不需要建立直接连接,MQTT Broker 负责路由和分发所有消息。

下图显示了 MQTT 发布/订阅过程。温度传感器作为客户端连接到 MQTT 服务器,并将温度数据发布到主题(例如 Temperature),服务器接收消息并将其转发给订阅 Temperature 主题的客户端。

MQTT 发布/订阅过程

MQTT 主题

chat/room/1

sensor/10/temperature

sensor/+/temperature

MQTT 主题支持以下通配符:+ 和 #。

  • +:表示单级通配符,例如a/+匹配a/x或a/y。
  • #:表示多级通配符,例如a/#匹配a/x、a/b/c/d。

MQTT 服务质量 (QoS)

MQTT 提供三种服务质量,保证不同网络环境下的消息传递可靠性。

  • QoS 0:至多一次传递。消息可能会丢失或重复,但不会保证传递。
  • QoS 1:至少一次传递。消息至少会被传递
  • QoS 2:消息仅传递一次。消息将被确保只传递一次,避免重复。

MQTT 工作流程

  1. 客户端初始化连接:客户端使用 TCP/IP 启动与代理的连接 ,并带有可选的 TLS/SSL 加密以实现安全通信。客户端提供身份验证凭据并指定干净或持久的会话。
  2. 客户端将消息发布到特定主题或订阅主题 以接收消息。发布客户端向代理发送消息,而订阅客户端则表示有兴趣接收有关特定主题的消息。
  3. 代理接收已发布的消息 并将其转发给订阅相关主题的所有客户端。它确保根据指定的服务质量 (QoS) 级别进行可靠的消息传递,并根据会话类型管理断开连接的客户端的消息存储。
最近更新: 2025/8/1 18:48
贡献者: Tinywan
Prev
🔶 MQTT与PHP使用实时消息传递指南