zoukankan      html  css  js  c++  java
  • MQTT协议笔记之订阅(NO.4)

    1. 前言

    一般来讲,客户端在成功建立TCP连接之后,发送CONNECT消息,在得到服务器端授权允许建立彼此连接的CONNACK消息之后,客户端会发送SUBSCRIBE消息,订阅感兴趣的Topic主题列表(至少一个主题)

    2. SUBSCRIBE

       一个完整的subscribe包示范如下

      

    2.1 固定头部

      Qos Level,其值可根据实际情况调整为0/1/2等,一般设为0表示最多一次 (与publish中的 QoS意义 不一样?),客户端可设置OoS Level值。

      DUP flag,值为0表示第一次发送。

    2.2 可变头部

      因为上面示范QoS level值为1,因此需要客户端传递消息ID,16位,无符号的short类型 

      MSB(Most Significant Bit) LSB(Last/Least Significant Bit),翻译成中文就是,最高有效位,最低有效位。最高有效位在最低有效位左边/上面,表示这是一个大端字节/网络字节序,符合人的阅读习惯,高位在最左边

    2.3 消息体

      格式:

      len(topic1) | topic1 | topic1-qos | len(topic2) | topic2 | topic2-qos |……

      订阅的主题名称采用修改版UTF-8编码,然后紧跟着对应的QoS值。下面的次序,可能更为形象:

    len(topic1) 3
    topic1 "a/b"
    topic1 qos 1
    len(topic2) 4
    topic2 "b/cc"
    topic2 qos 2

      

      订阅者的Topic name支持通配符:

        /:用来表示层次,比如a/b,a/b/c
        #:表示匹配>=0个层次,比如a/#就匹配a/,a/b,a/b/c
          单独的一个#表示匹配所有,不允许 a#和a/#/c
        +:表示匹配一个层次,例如a/+匹配a/b,a/c,不匹配a/b/c。
          单独的一个+是允许的,a+不允许,a/+/b不允许
    在服务器接收处理时,按照顺序读取即可:
    String topicName = readUTF();
    int qosVal = read();

    服务器可以发送QoS不大于客户端设置OoS的消息,尤其是服务器不提供良好的持久化机制的时候

    3. SUBACK

      服务器对发出SUBSCRIBE消息终端返回的一个确认消息

      

    3.1 可变头部

      Message Identifier,服务器需要附加,客户端需要处理

    3.2 消息体  

      QoS,为服务器根据实际情况授予的QoS级别列表,和客户端发送的SUBSCRIBE的订阅Topic Name顺序完全一致。

      客户端订阅几个TOPIC,服务器端一一给出各个TOPIC的QoS具体值 

    4. UNSUBSCRIBE

      服务器需要支持客户端取消订阅功能,UNSUBSCRIBE消息格式和SUBSCRIBE消息格式差不多,除了消息类型不同,消息体中没有了QoS字节,其它没有区别

        

      可变头部的消息ID的出现还是由固定头部的QoS Level(1)决定是否存在。

      一般来讲,客户端发布退订,服务器端需要返回退订确认。

      MQTT没讲是否允许客户端退订所有TOPIC。

    5. UNSUBACK

      服务器返回的针对UNSUBSCRIBE消息的UNSUBACK很简单,没有消息体

      

    小结

      订阅部分,共有四个消息,分别一一对应

      

    转自:http://www.blogjava.net/yongboy/archive/2014/04/12/412351.html

  • 相关阅读:
    聊聊es6中的解构
    JavaScript 中的面向对象编程
    TypeScript 中的类型保护
    7个你应该知道的 JavaScript 原生错误类型
    使用JavaScript策略模式校验表单
    nodejs如何解决高并发?
    nodejs核心模块有哪些?
    Dungeon Master
    Gold Balanced Lineup
    poj 2513Colored Sticks
  • 原文地址:https://www.cnblogs.com/yorkyang/p/6341330.html
Copyright © 2011-2022 走看看