<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    聶永的博客

    記錄工作/學習的點點滴滴。

    MQTT協議筆記之訂閱

    前言

    記憶不太好的時候,只能翻看以前的文章/筆記重新溫習一遍,但找不到MQTT協議有關訂閱部分的描述,好不容易從Evernote中找到貼出來,這樣整個MQTT協議筆記,就比較齊全了。

    SUBSCRIBE

    一般來講,客戶端在成功建立TCP連接之后,發送CONNECT消息,在得到服務器端授權允許建立彼此連接的CONNACK消息之后,客戶端會發送SUBSCRIBE消息,訂閱感興趣的Topic主題列表(至少一個主題),一個完整示范如下:


    Description 7 6 5 4 3 2 1 0
    Fixed header/固定頭部
    byte 1   Message Type(8) DUP flag QoS level RETAIN
        1 0 0 0 0 0 1 x
    byte 2 Remaining Length
    Variable header/可變頭部
    Message Identifier
    byte 1 Message ID MSB (0) 0 0 0 0 0 0 0 0
    byte 2 Message ID LSB (10) 0 0 0 0 1 0 1 0
    Playload/消息體
    Topic name
    byte 1 Length MSB (0) 0 0 0 0 0 0 0 0
    byte 2 Length LSB (3) 0 0 0 0 0 0 1 1
    byte 3 'a' (0x61) 0 1 1 0 0 0 0 1
    byte 4 '/' (0x2F) 0 0 1 0 1 1 1 1
    byte 5 'b' (0x62) 0 1 1 0 0 0 1 0
    Requested QoS
    byte 6 Requested QoS (1) x x x x x x 0 1
    Topic Name
    byte 7 Length MSB (0) 0 0 0 0 0 0 0 0
    byte 8 Length LSB (3) 0 0 0 0 0 0 1 1
    byte 9 'c' (0x63) 0 1 1 0 0 0 1 1
    byte 10 '/' (0x2F) 0 0 1 0 1 1 1 1
    byte 11 'd' (0x64) 0 1 1 0 0 1 0 0
    Requested QoS
    byte 12 Requested QoS (2) x x x x x x 1 0

    固定頭部

    Qos Level,可根據實際情況進行調整為0/1/2等。一般設為0表示最多一次。客戶端可設置OoS Level值。 DUP flag,值為0表示第一次發送。

    可變頭部

    因為上面示范QoS level值為1,因此需要客戶端傳遞消息ID,16位,無符號的short類型。

    消息體

    訂閱的主題名稱采用修改版UTF-8編碼,然后緊跟著對應的QoS值。下面的次序,可能更為形象:

    Topic name "a/b"
    Requested QoS 1
    Topic name "c/d"
    Requested QoS 2

    訂閱者的Topic name支持通配符#和+ :

    1. #支持一個主題內任意級別話題
    2. +只匹配一個主題級別的通配符

    eg:

    finance/stock/#
    finance/sotkc/ibm/+
    

    都是有效,更具體規則,請參閱協議附加部分。

    在服務器接收處理時,按照順序讀取即可:

    String topicName = readUTF();
    int qosVal = read();
    

    服務器可以發送QoS不大于客戶端設置OoS的消息,尤其是服務器不提供良好的持久化機制的時候。

    SUBACK

    服務器會對發出SUBSCRIBE的消息返回一個確認消息。


    Description 7 6 5 4 3 2 1 0
    Fixed header/固定頭部
    byte 1   Message type (9) DUP flag QoS flags RETAIN
        1 0 0 1 x x x x
    byte 2   Remaining Length
    Variable header/可變頭部
    Message Identifier
    byte 1 Message ID MSB (0) 0 0 0 0 0 0 0 0
    byte 2 Message ID LSB (10) 0 0 0 0 1 0 1 0
    Playload/消息體
    byte 1 Granted QoS (0) x x x x x x 0 0
    byte 1 Granted QoS (2) x x x x x x 1 0

    可變頭部

    Message Identifier,服務器需要附加,客戶端需要處理。

    消息體

    QoS,為服務器根據實際情況授予的QoS級別列表,和客戶端發送的SUBSCRIBE的訂閱Topic Name順序完全一致。

    客戶端訂閱幾個TOPIC,服務器端一一給出各個TOPIC的QoS具體值。

    UNSUBSCRIBE

    服務器需要支持客戶端取消訂閱功能,UNSUBSCRIBE消息格式和SUBSCRIBE消息格式差不多,除了消息類型不同,消息體中沒有了QoS字節,其它沒有區別。


    Description 7 6 5 4 3 2 1 0
    Fixed header/固定頭部
    byte 1   Message Type(10) DUP flag QoS level RETAIN
        1 0 1 0 0 0 1 x
    byte 2 Remaining Length
    Variable header/可變頭部
    Message Identifier
    byte 1 Message ID MSB (0) 0 0 0 0 0 0 0 0
    byte 2 Message ID LSB (10) 0 0 0 0 1 0 1 0
    Playload/消息體
    Topic name
    byte 1 Length MSB (0) 0 0 0 0 0 0 0 0
    byte 2 Length LSB (3) 0 0 0 0 0 0 1 1
    byte 3 'a' (0x61) 0 1 1 0 0 0 0 1
    byte 4 '/' (0x2F) 0 0 1 0 1 1 1 1
    byte 5 'b' (0x62) 0 1 1 0 0 0 1 0
    Topic Name
    byte 6 Length MSB (0) 0 0 0 0 0 0 0 0
    byte 7 Length LSB (3) 0 0 0 0 0 0 1 1
    byte 8 'c' (0x63) 0 1 1 0 0 0 1 1
    byte 9 '/' (0x2F) 0 0 1 0 1 1 1 1
    byte 10 'd' (0x64) 0 1 1 0 0 1 0 0

    可變頭部的消息ID的出現還是由固定頭部的QoS Level(1)決定是否存在。

    一般來講,客戶端發布退訂,服務器端需要返回退訂確認。

    MQTT沒講是否允許客戶端退訂所有TOPIC。

    UNSUBACK

    服務器返回的UNSUBSCRIBE消息UNSUBACK相應很簡單,沒有消息體。


    Description 7 6 5 4 3 2 1 0
    Fixed header/固定頭部
    byte 1   Message type (9) DUP flag QoS flags RETAIN
        1 0 1 1 x x x x
    byte 2   Remaining length (2)
        0 0 0 0 0 0 1 0
    Variable header/可變頭部
    Message Identifier
    byte 1 Message ID MSB (0) 0 0 0 0 0 0 0 0
    byte 2 Message ID LSB (10) 0 0 0 0 1 0 1 0

    小結

    訂閱部分,共有四個消息,分別一一對應。

    命令 響應 備注 建議
    SUBSCRIBE SUBACK 協議沒有涉及最多運行訂閱TOPIC數目,隱藏的隱患 建議至多10個
    UNSUBSCRIBE UNSUBACK 是否可以退訂所有訂閱,不詳 建議保留至少一個Topic

    posted on 2014-04-12 16:03 nieyong 閱讀(19911) 評論(16)  編輯  收藏 所屬分類: MQTT

    評論

    # re: MQTT協議筆記之訂閱 2014-04-12 23:19 wingsBlog

    好暈啊  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-04-14 13:10 魏五鎖業

    謝謝博主分享啊  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-04-14 17:56 種植技術網

    貌似表格在火狐瀏覽器不兼容的。  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-04-14 21:10 萬利鎖業

    期待更新啊  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-04-15 10:08 萬利鎖業

    謝謝博主分享  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-04-15 10:09 金利鎖業

    給力支持博主  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-04-15 11:19 魏五鎖業

    謝謝博主分享啊  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-04-16 09:46 骰寶訊特

    哇塞  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-04-16 09:49 魏五鎖業

    支持博主幸福  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-04-16 12:34 開鎖者

    謝謝博主 分享啊  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-04-19 11:27 2654546476@qq.com

    支持  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-04-28 09:48 百家樂

    暫時看不懂,屆時在研究研究、  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-08-26 13:51 好鄰居

    進來先學習了!有不懂的再說了!  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-09-09 16:53 hut140@163.com

    感謝樓主,正需要  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2014-11-13 15:52 樂不思蜀

    博主好文章  回復  更多評論   

    # re: MQTT協議筆記之訂閱 2015-03-19 16:45 嘴巴周圍長痘痘

    不錯,樓主,我想問一下注冊一個空間怎樣插入代碼才是有效的  回復  更多評論   

    公告

    所有文章皆為原創,若轉載請標明出處,謝謝~

    新浪微博,歡迎關注:

    導航

    <2014年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    統計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 无码高潮少妇毛多水多水免费| 91成人在线免费视频| 中文字幕视频在线免费观看| 久久免费精品一区二区| 18以下岁毛片在免费播放| 女人18特级一级毛片免费视频| 亚洲制服在线观看| 麻豆狠色伊人亚洲综合网站| 激情无码亚洲一区二区三区| 国产精品免费在线播放| 67pao强力打造高清免费| 香蕉高清免费永久在线视频 | 日本道免费精品一区二区| 99国产精品免费视频观看| 午夜无遮挡羞羞漫画免费| 亚洲一区二区三区免费| 亚洲精品免费在线视频| 羞羞视频网站免费入口| 久久狠狠躁免费观看2020| 成人免费看吃奶视频网站| 精品国产亚洲一区二区在线观看 | 香港一级毛片免费看| 国产在线观看免费av站| 成人免费黄色网址| 亚洲午夜精品久久久久久浪潮 | 亚洲熟妇av一区二区三区漫画| 亚洲性无码av在线| 亚洲精品黄色视频在线观看免费资源 | 亚洲另类视频在线观看| 男人j进女人p免费视频| 久久w5ww成w人免费| 国产国产成年年人免费看片| 亚洲av无码乱码国产精品| 日韩欧美亚洲国产精品字幕久久久 | 又粗又长又爽又长黄免费视频 | 国产成人精品免费视频大| 亚洲成年人啊啊aa在线观看| 91精品国产亚洲爽啪在线影院| 国产在亚洲线视频观看| h在线观看视频免费网站| 国产国拍亚洲精品福利 |