01. 基本概念
基本概念
MQTT 协议的通信模型

- 发布方(Publisher)连接到
Broker ; - 订阅方(Subscriber)连接到
Broker ,并订阅主题Topic1 ; - 发布方(Publisher)发送给
Broker 一条消息,主题为Topic1 ; Broker 收到了发布方的消息,发现订阅方(Subscriber)订阅了Topic1 ,然后将消息转发给订阅方(Subscriber) ;- 订阅方从
Broker 接收该消息;
在该通信模型中,有两组身份需要区别:
-
一组是发布方
Publisher 和订阅方Subscriber :publisher 和subscriber 是相对于Topic 来说的身份,如果一个Client 向某个Topic 发布消息,那么这个Client 就是publisher ;如果一个Client 订阅了某个Topic ,那么它就是Subscriber 。 -
另一组是发送方
Sender 和接收方Receiver :Sender 和Receiver 则是相对于消息传输方向的身份。当publisher 向Broker 发送消息时,那么此时publisher 是sender ,Broker 是receiver ;当Broker 转发消息给subscriber 时,此时Broker 是sender ,subscriber 是receiver 。
MQTT 客户端
一个使用
- 可以发布信息,其他客户端可以订阅该信息
- 订阅其它客户端发布的消息
- 退订或删除应用程序的消息
- 断开与服务器连接
MQTT 服务器
- 接受来自客户端的网络连接
- 接受客户端发布的应用信息
- 处理来自客户端的订阅和退订请求
- 向订阅的客户转发应用程序消息
主题(Topic)
连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。
- 要订阅的主题。一个主题可以有多个级别,级别之间用斜杠字符分隔。例如
/world 和emq/emqtt/emqx 是有效的主题。 - 订阅者的
Topic name 支持通配符#
和+
:#
支持一个主题内任意级别话题,+
只匹配一个主题级别的通配符。 - 客户端成功订阅某个主题后,代理会返回一条
SUBACK 消息,其中包含一个或多个returnCode 参数。
QoS(消息传递的服务质量水平)
服务质量,标志表明此主题范围内的消息传送到客户端所需的一致程度。
- 值
0 :不可靠,消息基本上仅传送一次,如果当时客户端不可用,则会丢失该消息。 - 值
1 :消息应传送至少1 次。 - 值
2 :消息仅传送一次。
会话(Session)
每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。
订阅(Subscription)
订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS
-
客户端在成功建立
TCP 连接之后,发送CONNECT 消息,在得到服务器端授权允许建立彼此连接的CONNACK 消息之后,客户端会发送SUBSCRIBE 消息,订阅感兴趣的Topic 主题列表(至少一个主题) -
订阅的主题名称采用
UTF-8 编码,然后紧跟着对应的QoS 值
发布(publish)
控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息,