mqtt网络协议笔记
1:MQTT采用代理的发布/订阅的方式实现了发布者/订阅者这种方式的网络连接,MQTT协议中有三种角色:代理服务器、发布者客户端、订阅者客户端,其中发布者客户端和订阅者客户端互不干扰。它们都是只知道代理服务器的存在,代理服务器负责将发布者的消息进行存储处理并将这些消息发送到正确的订阅者中去。
2:代理服务器:代理服务器可以是一个程序或者设备,作为发送消息的客户端和请求订阅的客户端之间的中介。其主要作用是接收发布者客户端发布的应用信息,然后将信息转发给符合条件的订阅者客户端。
3:客户端:客户端指使用MQTT协议的程序或设备。客户端包括发布者客户端和订阅者客户端,同一个客户端可以即是发布者也是订阅者。客户端可以发布消息给其它相关客户端,也可以订阅其它客户端发布的消息。MQTT官方提供了Client SDK,可以帮助客户快速开发MQTT客户端。
4:主题:MQTT通过“主题”实现将消息从发布者客户端送达至接收者客户端。“主题”是附加在应用消息上的一个标签,发布者客户端将“主题”和“消息”发送至代理服务器,代理服务器将该消息转发至每一个订阅了该“主题”的订阅者客户端,一个主题名可以由多个主题层级组成,每一层通过“/”斜杠分隔开,订阅者客户端A将主题过滤器设置为“baidu/F1”;订阅者客户端B将主题过滤器设置为“baidu/F2”。发布者客户端向“baidu/F1”发布消息,因此只有订阅者客户端A可以接收到该消息。
5:通配符:如果用户需要一次订阅多个具有类似结构的主题,可以在主题过滤器中包含通配符。通配符只可用在主题过滤器中,在发布应用消息时的主题名不允许包含通配符,主题通配符有两种:
(1)#:表示匹配>=0个层次,比如a/#就匹配a/b,a/b/c(不能匹配a/,后面必须有其它主题)。单独的一个#表示匹配所有,不允许a#或a/#/c等形式。
(2)+:表示匹配一个层次,例如a/+匹配a/b,a/c,不匹配a/b/c。单独的一个+是允许的,但a+为非法形式。
6:服务质量:对传输消息有三种服务质量(QoS):
(1) 最多一次
,这一级别会发生消息丢失或重复,消息发布依赖于底层TCP/IP网络。即:<=1
(2) 至多一次
,这一级别会确保消息到达,但消息可能会重复。即:>=1
(3) 只有一次
,确保消息只有一次到达。即:=1。在一些要求比较严格的计费系统中,可以使用此级别
个人理解:这种代理服务器的方式避免了服务端/客户端之间连接后传输数据的情况,订阅者客户端和发布者客户端之间互不相关。