zoukankan      html  css  js  c++  java
  • 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.有效载荷

     没有有效载荷。

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

  • 相关阅读:
    windows8安装docker(tool box)
    windows8 使用docker创建第一个nodejs运行环境
    nodejs使用fetch获取WebAPI
    Nodejs获取Azure Active Directory AccessToken
    使用Bot Service创建Bot Framework
    安装Team Services Agent Win7
    Nodejs微信与Bot framework通过Direct Line连接
    修改cmd默认启动路径
    less配置
    javascript滚动到大于一定距离显示隐藏
  • 原文地址:https://www.cnblogs.com/pandaNHF/p/14228803.html
Copyright © 2011-2022 走看看