<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)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产美女无遮挡免费网站| 午夜网站免费版在线观看| 亚洲色婷婷六月亚洲婷婷6月| 亚洲av无码专区亚洲av不卡| 免费羞羞视频网站| 国产成人亚洲综合无| 国产精品成人免费综合| 精品一区二区三区免费毛片| 免费在线看片网站| kk4kk免费视频毛片| 亚洲精品无码不卡在线播HE | 插鸡网站在线播放免费观看| 亚洲日本一区二区一本一道 | 亚洲日本香蕉视频| 99re热免费精品视频观看| 亚洲依依成人亚洲社区| 全部免费毛片免费播放| 中文字幕免费观看全部电影| 久久水蜜桃亚洲av无码精品麻豆| 亚洲啪啪免费视频| 亚洲AV成人无码网天堂| 久久久久亚洲AV成人网人人软件| 91在线免费视频| 91嫩草亚洲精品| 国产男女猛烈无遮挡免费视频网站| 国产亚洲人成在线影院| 国产亚洲无线码一区二区 | 国产精品亚洲w码日韩中文| 好紧我太爽了视频免费国产| 亚洲午夜一区二区电影院| 韩国18福利视频免费观看| 你是我的城池营垒免费观看完整版 | 啦啦啦手机完整免费高清观看| 美女黄频免费网站| 亚洲综合婷婷久久| 热99re久久免费视精品频软件 | GOGOGO免费观看国语| 亚洲国产美女视频| 亚洲欧洲精品成人久久奇米网| 久久久久高潮毛片免费全部播放| 亚洲国产AV一区二区三区四区|