通过上一节我们对MQTT协议已经有了初步的印象,这一节我们开始深入的理解一下MQTT协议,介绍常用的MQTT 3.1.1版本,5.0版本后面指介绍新增部分即可。这一节我们先介绍MQTT里常用的术语(非官方文档直接复制)。
网络连接(Network Connection):
MQTT 是一种连接协议,底层使用 TCP/IP (传输层协议)提供网络连接,提供有序、可靠的、双向字节流传输。这个连接需要互联网通信的基础设施支撑,客户端使用它连接到服务端(MQTT代理服务的服务器或服务器集群)。
会话(Session):
客户端与服务端通过网络连接后的信息通道,服务端会有一个唯一的标志识别,也是状态交互的反映。通常一个会话就是一个网络连接,有些网络环境也可能将一个会话会扩展几个网络连接为之服务。
应用消息(Application Message):
使用MQTT协议通过网络连接传输的应用数据,也就是客户端与服务端之间交互的应用数据。应用消息通过MQTT传输时, 会有携带服务质量(QoS)和主题(Topic)等信息内容的。
服务端(Server) / 代理(Broker):
一个服务程序或设备,为消息发送方和消息订阅方提供中介服务,为发送方和订阅方提供中转分配处理,这个服务程序也称之为代理(Broker)。要处理来自客户端的网络连接、发布的应用消息,处理保存客户端的订阅和取消订阅,将应用消息转发给符合订阅条件的客户端,关闭客户端发出断开连接请求的网络连接等。
客户端(Client):
是与服务端对应的,使用MQTT为客户提供本地服务的程序或设备。客户端总是先发起连接请求通过网络连接到服务端。它可以:打开连接到服务端的网络连接、通过服务端发布应用消息给其他相关的客户端、订阅并接收相关的应用消息、取消订阅并不再接收相应消息、关闭与服务端的网络连接等。
主题(Topic):
标注应用程序消息的标签,订阅者用它来确定接收到所关心的消息,服务端代理服务会将消息转发给订阅者所匹配标签的每个客户端。主题名是一个分层的结构,可以有多个级别,级别之间用斜杠分隔。例:area-a/building-6/floor-8 代表A区6栋5层的设备发出的主题。
订阅者的主题名支持通配符#和+,可以通过通配符进行匹配过滤:
+为只匹配主题一个层级的通配符,例:area-a/+/floor-8 代表A区任何一个楼的8层的设备。
#为匹配主题该层级向后任意级别的通配符,例:area-a/# 代表A区的所用设备。
发布(Publish):
从MQTT客户端向MQTT服务端主动发送主题消息,或MQTT服务端向MQTT客户端主动发送主题消息(这种情况很少)。主题消息中包含着服务质量(QoS)等级。
订阅(Subscription):
订阅的过程与我们生活中向邮局订阅杂志类似,只不过是客户端向服务端订阅,订阅的是主题消息而不是杂志。当服务端的代理服务发现有客户端发布了某客户端订阅的主题消息时,就会把该主题消息转发给订阅了该主题消息的那个客户端。订阅的主题会与某个单一会话(Session)关联,一个会话可以关联多个订阅。每个订阅都包含一个主题过滤器(Topic Filter)和一个最大的服务质量(QoS)等级。
|