MQTT基礎(chǔ) 三: 發(fā)布、訂閱和取消訂閱

內(nèi)容:
重點介紹MQTT 中的發(fā)布、訂閱和取消訂閱的細(xì)節(jié)

正文

發(fā)布(Publish)
  • MQTT 客戶端可以在連接到代理后立即發(fā)布消息纪挎。MQTT 在代理上使用基于主題的消息過濾。每條消息都必須包含一個主題跟匆,代理可以使用該主題將消息轉(zhuǎn)發(fā)給感興趣的客戶端异袄。通常,每條消息都有一個負(fù)載贾铝,其中包含要以字節(jié)格式傳輸?shù)臄?shù)據(jù)隙轻。MQTT 與數(shù)據(jù)無關(guān)」缚客戶端的用例決定了有效負(fù)載的結(jié)構(gòu)。發(fā)送客戶端(發(fā)布者)決定是否要發(fā)送二進(jìn)制數(shù)據(jù)敛瓷、文本數(shù)據(jù)叁巨,甚至完整的 XML 或 JSON。
image.png
  • topicName
    主題名稱是一個簡單的字符串呐籽,它以正斜杠作為分隔符進(jìn)行分層結(jié)構(gòu)锋勺。例如蚀瘸,“我的家/客廳/溫度”

  • Qos
    此數(shù)字表示消息的服務(wù)質(zhì)量 (QoS)。有三個級別:0庶橱、1 和 2贮勃。服務(wù)級別決定了消息到達(dá)預(yù)期接收者(客戶端或代理)的保證類型。

  • RatainFlag(保留標(biāo)志)
    此標(biāo)志定義消息是否由代理保存為指定主題的最后一個已知良好值苏章。當(dāng)新客戶端訂閱主題時寂嘉,他們會收到保留在該主題上的最后一條消息。

  • PayLoad
    這是消息的實際內(nèi)容枫绅。MQTT 與數(shù)據(jù)無關(guān)泉孩。可以發(fā)送圖像并淋、任何編碼的文本寓搬、加密數(shù)據(jù)以及幾乎所有二進(jìn)制數(shù)據(jù)。

  • packetId(數(shù)據(jù)包標(biāo)識符)
    數(shù)據(jù)包標(biāo)識符標(biāo)識唯一消息县耽,因為它在客戶端和代理之間流動句喷。數(shù)據(jù)包標(biāo)識符僅與大于零的 QoS 級別相關(guān)⊥帽校客戶端庫和/或代理負(fù)責(zé)設(shè)置此內(nèi)部 MQTT 標(biāo)識符脏嚷。

  • DupFlag
    該標(biāo)志表明該消息是重復(fù)的并且由于預(yù)期的接收者(客戶端或代理)沒有確認(rèn)原始消息而被重新發(fā)送。這僅與 QoS 大于 0 相關(guān)瞒御。通常父叙,重新發(fā)送/復(fù)制機制由 MQTT 客戶端庫或代理作為實現(xiàn)細(xì)節(jié)處理。

    當(dāng)客戶端向MQTT 代理發(fā)送消息進(jìn)行發(fā)布時肴裙,代理讀取消息趾唱、確認(rèn)消息(根據(jù) QoS 級別)并處理消息。代理的處理包括確定哪些客戶端訂閱了主題并將消息發(fā)送給他們蜻懦。
    最初發(fā)布消息的客戶端只關(guān)心將 PUBLISH 消息傳遞給代理甜癞。一旦代理收到 PUBLISH 消息,代理就有責(zé)任將消息傳遞給所有訂閱者宛乃。發(fā)布客戶端不會得到關(guān)于是否有人對發(fā)布的消息感興趣或有多少客戶端從代理收到消息的任何反饋悠咱。

訂閱(Subscribe)
  • 如果沒有人收到消息,發(fā)布消息就沒有意義征炼。換句話說析既,如果沒有客戶端訂閱消息的主題。這個訂閱消息非常簡單谆奥,它包含一個唯一的數(shù)據(jù)包標(biāo)識符和一個訂閱列表眼坏。
image.png
  • 數(shù)據(jù)包標(biāo)識符
    數(shù)據(jù)包標(biāo)識符唯一標(biāo)識消息,因為它在客戶端和代理之間流動酸些≡滓耄客戶端庫和/或代理負(fù)責(zé)設(shè)置此內(nèi)部 MQTT 標(biāo)識符檐蚜。

  • 訂閱列表
    一個 SUBSCRIBE 消息可以包含一個客戶端的多個訂閱。每個訂閱由一個主題和一個 QoS 級別組成沿侈。訂閱消息中的主題可以包含通配符闯第,使訂閱主題模式而不是特定主題成為可能。如果一個客戶端存在重疊訂閱缀拭,則代理會傳送該主題具有最高 QoS 級別的消息咳短。

Suback(確認(rèn)消息)
  • 為了確認(rèn)每個訂閱,代理向客戶端發(fā)送一個SUBACK確認(rèn)消息智厌。該消息包含原始 Subscribe 消息的數(shù)據(jù)包標(biāo)識符(以明確標(biāo)識該消息)和返回碼列表诲泌。

    image.png

  • 包標(biāo)識符
    包標(biāo)識符是用于標(biāo)識消息的唯一標(biāo)識符。它與 SUBSCRIBE 消息中的相同铣鹏。

  • 返回代碼
    代理為它在 SUBSCRIBE 消息中收到的每個主題/QoS 對發(fā)送一個返回代碼敷扫。
    例如,如果 SUBSCRIBE 消息有五個訂閱诚卸,則 SUBACK 消息包含五個返回碼葵第。返回碼確認(rèn)每個主題并顯示代理授予的 QoS 級別。如果代理拒絕訂閱合溺,則 SUBACK 消息包含該特定主題的失敗返回代碼卒密。例如藻治,如果客戶端沒有足夠的權(quán)限訂閱主題或主題格式錯誤碌嘀。

    image.png

    image.png

    客戶端成功發(fā)送 SUBSCRIBE 消息并收到 SUBACK 消息后樊销,它會獲取與 SUBSCRIBE 消息包含的訂閱中的主題匹配的每條已發(fā)布消息陷猫。

UNSUBACK
  • 為了確認(rèn)取消訂閱,代理向客戶端發(fā)送一個UNSUBACK確認(rèn)消息凰兑。此消息僅包含原始 UNSUBSCRIBE 消息的數(shù)據(jù)包標(biāo)識符(以明確標(biāo)識該消息)款青。
    image.png
  • 包標(biāo)識符
    包標(biāo)識符唯一地標(biāo)識消息纲酗。如前所述辩涝,這與 UNSUBSCRIBE 消息中的數(shù)據(jù)包標(biāo)識符相同贸伐。
    客戶端收到來自broker的UNSUBACK后,可以認(rèn)為UNSUBSCRIBE消息中的訂閱被刪除了怔揩。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捉邢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子商膊,更是在濱河造成了極大的恐慌伏伐,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翘狱,死亡現(xiàn)場離奇詭異秘案,居然都是意外死亡,警方通過查閱死者的電腦和手機潦匈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門阱高,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茬缩,你說我怎么就攤上這事赤惊。” “怎么了凰锡?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵未舟,是天一觀的道長。 經(jīng)常有香客問我掂为,道長裕膀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任勇哗,我火速辦了婚禮昼扛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘欲诺。我一直安慰自己抄谐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布扰法。 她就那樣靜靜地躺著蛹含,像睡著了一般。 火紅的嫁衣襯著肌膚如雪塞颁。 梳的紋絲不亂的頭發(fā)上浦箱,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音祠锣,去河邊找鬼酷窥。 笑死,一個胖子當(dāng)著我的面吹牛锤岸,可吹牛的內(nèi)容都是我干的竖幔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼是偷,長吁一口氣:“原來是場噩夢啊……” “哼拳氢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蛋铆,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤馋评,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刺啦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體留特,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜕青。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苟蹈。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖右核,靈堂內(nèi)的尸體忽然破棺而出慧脱,到底是詐尸還是另有隱情,我是刑警寧澤贺喝,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布菱鸥,位于F島的核電站,受9級特大地震影響躏鱼,放射性物質(zhì)發(fā)生泄漏氮采。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一染苛、第九天 我趴在偏房一處隱蔽的房頂上張望鹊漠。 院中可真熱鬧,春花似錦殖侵、人聲如沸贸呢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽楞陷。三九已至,卻和暖如春茉唉,著一層夾襖步出監(jiān)牢的瞬間固蛾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工度陆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留艾凯,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓懂傀,卻偏偏與公主長得像趾诗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蹬蚁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容