一、订阅主题

这个就是客户端发送给服务端要求订阅指定topic的报文了,在服务端可以设定是否支持通配符。

1.报文头

MQTT订阅 PYTHON mqtt订阅topic_服务端

报文类型是8,其他啥也没有。

2.可变头

里面有一个报文标识符,前文讲过,只要需要服务端答复的,都必须有这个标识符,不然服务端不知道针对哪个报文进行答复。

示例:假设报文标识符是10

MQTT订阅 PYTHON mqtt订阅topic_服务端_02

3有效载荷

主要包含两个东西,一个是你需要订阅的topic,这里面只是通配符标识。另一个是qos,这个主要是为了让服务端给你发publish报文的时候用的,publish上文说过必须要有这个东西。

示例:

MQTT订阅 PYTHON mqtt订阅topic_服务端_03

 

 可以看出,每个订阅主题,都可以让服务端发给你不同安全等级的publish报文。

二、订阅确认

服务端在收到客户端的订阅报文后,会根据报文变头里带着的报文标识符,返回一个确认报文以告诉客户端是否订阅成功。

服务端发送SUBACK报文给客户端,用于确认它已收到并且正在处理SUBSCRIBE报文。

SUBACK报文包含一个返回码清单,它们指定了SUBSCRIBE请求的每个订阅被授予的最大QoS等级。

1.固定头

报文类型是9,其他没啥。

2.可变头

无内容

3.有效载荷

MQTT订阅 PYTHON mqtt订阅topic_标识符_04

 

 每个字节代表订阅报文中一个topic被允许的最大qos值。也就是说服务端会告诉你,你这个订阅的主题,最多能给你的服务质量等级是多少。

 三、取消订阅

客户端告诉服务端,我不订阅某个主题了。

1.固定头

MQTT订阅 PYTHON mqtt订阅topic_客户端_05

控制报文类型是10,固定报头的第3,2,1,0位是保留位且必须分别设置为0,0,1,0,其他的都要断开连接。

2.可变头

没啥。

3.有效载荷

 

MQTT订阅 PYTHON mqtt订阅topic_MQTT订阅 PYTHON_06

 

 取消订阅报文必须有有效载荷,有效载荷里面存的就是你想取消订阅的主题。

 服务器收到了取消订阅报文必须给一个答复报文,答复报文的报文标识符必须跟取消订阅的一样。

四、取消订阅确认

1.固定头

控制类型11。

2.可变头

里面有取消订阅的报文标识符。

3.有效载荷

 没有有效载荷。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

------------恢复内容结束------------