文章目录
STM32-MQTT
1. MQTT简介
1.1 概述
消息队列遥测传输(Message Queuing Telemetry Transport, MQTT)是基于客户端(Client)/服务器(Server)
和发布(Pulishi)/订阅(Subscribe)
范式的消息传输协议. MQTT具有轻量、开放、简单、设计易于实施等特点, 这些特性使其在许多情况非常适用, 包括机器到机器(Machine to Machine, M2M)和物联网(IoT)
等受限环境, 这些环境对代码占用空间要求严格/或网络带宽非常宝贵. MQTT必须运行在提供有序、无损、双向连接的传输协议之上–通常是TCP/IP
.
1.2 基本概念
1.2.1 MQTT Broker(Server)/Client
MQTT协议定义了两种类型的网络实体: 一个消息代理(Broker)、多个客户端(Client).
Broker
是一个服务器程序, 它的角色类似于邮局, 它接收所有从Client发出的消息(message), 然后将消息路由到合适的目的Client.
Client
可以是运行MQTT库并通过网络连接到Broker的任意设备(从微控制器到服务器).
1.2.2 Publish/Subscribe & Topic
每个Client都可以将消息发布(Publish
)到Broker, 或从Broker订阅(Subscribe
)消息, 因此Client有两种角色: 发布者(Publisher
)/订阅者(Subscriber
).
消息在Broker中按照主题层次结构(Topic)组织. Publisher
在发布消息时指定Topic, Broker
在接收到消息时, 根据Topic将消息发布给订阅了该Topic的Subscriber
.
1.3 工作过程
MQTT Client和Broker通过TCP连接建立通信. 通常, Broker运行在服务器的1883端口上, 监听Client的连接请求.
- 建立连接(Connect). Client首先经过三次握手与Broker建立TCP连接, 然后发送
Connect Command
包登录Broker, Broker收到该包后, 回复Connect Ack
包以确认Client的登陆请求, Client即可进行消息的订阅和发布. - 发布消息(Publish). Client发送
Publish Message
包指定发布的消息内容(Message)及主题(Topic), Broker收到该包后不进行回复, 根据消息主题将该消息转发给订阅了该主题的所有Client. - 订阅消息(Subscribe). Client发送
Subscribe Request
包指定需要订阅的主题, Broker收到该包后回复Subscribe Ack
包确认订阅请求. 当Broker收到指定该主题的消息时, 会将该消息发布给所有订阅了该主题的Client. - 取消订阅(Unsubscribe). Client发送
Un