MQTT协议(四)——控制报文之订阅主题(SUBSCRIBE)、订阅确认(SUBACK)、取消订阅(UNSUBSCRIBE)和取消订阅确认(UNSUBACK)


一、订阅主题

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

1.报文头

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

2.可变头

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

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

3有效载荷

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

示例:

 

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

二、订阅确认

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

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

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

1.固定头

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

2.可变头

无内容

3.有效载荷

 

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

 三、取消订阅

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

1.固定头

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

2.可变头

没啥。

3.有效载荷

 

 

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

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

四、取消订阅确认

1.固定头

控制类型11。

2.可变头

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

3.有效载荷

 没有有效载荷。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM