MQTT 的核心组件是什么?

MQTT 的核心架构非常简洁,主要由 三个基本组件 构成。为了方便理解,我们继续使用“邮局系统”这个比喻。


MQTT 三大核心组件

  1. 代理 (Broker)
  2. 客户端 (Client)
  3. 主题 (Topic)

1. 代理 (Broker)

  • 比喻:邮局中心

代理是 MQTT 系统的心脏和中枢神经。它是一个服务器软件,负责接收所有来自客户端的消息,并根据规则将这些消息准确地分发给相应的订阅者。所有的客户端都只与 Broker 通信,客户端之间从不直接连接。

核心职责:

  • 接收连接:接受来自客户端的网络连接请求。
  • 身份验证与授权:验证客户端的身份(用户名/密码、证书等),并确认它们是否有权限发布或订阅特定主题。
  • 接收消息:接收来自发布者客户端的消息。
  • 处理订阅:管理所有客户端的订阅请求,维护一个“谁订阅了什么主题”的列表。
  • 路由消息:这是 Broker 最核心的功能。当它收到一条消息时,会立即查找订阅了该消息主题的客户端列表,并将消息转发给所有匹配的客户端。
  • 会话管理:管理客户端的会话状态,包括处理持久会话、离线消息、遗嘱(Last Will)消息和保留消息(Retained Messages)。

常见 Broker 软件: Eclipse Mosquitto (轻量级,非常适合入门和中小型项目), EMQX (功能强大,高并发,专为企业级和大规模物联网平台设计), HiveMQ 等。

2. 客户端 (Client)

  • 比喻:邮局的顾客(既可以是寄信人,也可以是收信人)

客户端可以是任何连接到 Broker 的设备或应用程序。它可以是嵌入式设备上的一个传感器,也可以是手机上的一个 App,或是一个后端服务。

一个客户端可以扮演两种角色,并且可以同时是发布者和订阅者

A. 发布者 (Publisher)
  • 角色:寄信人。
  • 职责
    1. 与 Broker 建立连接。
    2. 将包含数据的消息发布到一个指定的主题上。
    • 发布者完成发布后,它的任务就结束了。它不关心谁会收到这个消息,也不需要知道是否有任何订阅者存在。
B. 订阅者 (Subscriber)
  • 角色:收信人。
  • 职责
    1. 与 Broker 建立连接。
    2. 向 Broker 发送一个或多个订阅请求,告诉 Broker 它对哪些主题感兴趣。
    3. 等待并接收来自 Broker 的消息。
    • 订阅者只关心它感兴趣的主题,它不关心消息是哪个发布者发送的。

3. 主题 (Topic)

  • 比喻:信件上的地址 或 杂志的频道名称

主题不是一个物理组件,而是一个消息标签通信渠道。它是一个 UTF-8 编码的字符串,用于让 Broker 对消息进行分类和路由。

核心特性:

  • 层级结构 (Hierarchical):主题由一个或多个层级组成,层级之间用斜杠 / 分隔,非常像文件系统的路径。

    • 例如:smart_home/living_room/temperature
    • 这个结构使得主题管理非常灵活和有条理。
  • 消息过滤的核心:Broker 正是利用主题来决定将消息发送给哪些订阅者。

  • 支持通配符 (Wildcards):这是主题非常强大的一个特性,允许订阅者一次性订阅多个匹配的主题。

    • 单层通配符 +:匹配单个层级。
      • 订阅 smart_home/+/temperature 可以收到来自 smart_home/living_room/temperaturesmart_home/bedroom/temperature 的消息,但收不到 smart_home/garage/light/status 的消息。
    • 多层通配符 #:匹配任意数量的层级(必须在主题的末尾)。
      • 订阅 smart_home/# 可以收到 smart_home 下所有子主题的消息,包括 smart_home/living_room/temperaturesmart_home/garage/light/status

工作流程示例

让我们把这三个组件串起来,看看一个完整的通信流程:

  1. 准备阶段:

    • 一个客户端 A(例如,一个手机 App)连接到 Broker,并订阅了主题 home/light/status
    • 一个客户端 B(例如,一个智能灯泡)也连接到 Broker
  2. 发布消息:

    • 客户端 B (发布者) 的状态发生了改变(比如灯被打开了)。
    • 它向 Broker 发布一条消息,消息的主题home/light/status,消息的内容 (Payload)"ON"
  3. Broker 路由:

    • Broker 接收到这条消息。
    • 它检查自己的订阅列表,发现客户端 A 订阅了 home/light/status 这个主题。
  4. 接收消息:

    • Broker 立即将消息 ("ON") 转发给客户端 A
    • 客户端 A (订阅者) 收到消息,并在界面上显示“灯已打开”。

总结

这三个组件——代理 (Broker)客户端 (Client)主题 (Topic)——协同工作,构成了 MQTT 协议强大而灵活的通信基础。理解它们各自的角色以及它们之间的交互方式,是掌握 MQTT 的关键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值