国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【如何構(gòu)建商業(yè)級(jí)別聊天系統(tǒng)】 MQTT 篇(四)MQTT 特性之 持久會(huì)話、保留消息、遺囑

LancerComet / 3040人閱讀

摘要:如何構(gòu)建商業(yè)級(jí)別聊天系統(tǒng)篇四特性之持久會(huì)話保留消息遺囑本篇將介紹的一些我們應(yīng)該關(guān)注的特性關(guān)注不迷路我是擱淺神秘地址持久會(huì)話為什么需要持久會(huì)話為了接收的消息,客戶端在連接時(shí)會(huì)創(chuàng)建其感興趣主題的訂閱。代理僅存儲(chǔ)每個(gè)主題的一條保留消息。

【如何構(gòu)建商業(yè)級(jí)別聊天系統(tǒng)】 MQTT 篇(四)MQTT 特性之 持久會(huì)話、保留消息、遺囑

本篇將介紹 MQTT 的一些我們應(yīng)該關(guān)注的特性
關(guān)注不迷路!! 我是 dying 擱淺 神秘地址

1. 持久會(huì)話

為什么需要持久會(huì)話?

為了接收 MQTT broker 的消息,客戶端在連接 broker 時(shí)會(huì)創(chuàng)建其感興趣主題的訂閱。當(dāng)客戶端和代理的連接在非持久會(huì)話中斷開(kāi)時(shí),這些主題將丟失,這意味著客戶端在重新連接時(shí)需要重新訂閱,這對(duì)于資源受限的客戶端來(lái)說(shuō)是一筆很高的消耗。同時(shí)我們?cè)诖蠖鄶?shù)業(yè)務(wù)場(chǎng)景下都需要保存一個(gè)持久的會(huì)話來(lái)記錄客戶端的狀態(tài)(如保存在 DB 中)。那么將會(huì)話的狀態(tài)等信息保存到代理 broker 中就是一個(gè)很好的選擇。在客戶端與服務(wù)代理建立連接時(shí)根據(jù)唯一的標(biāo)識(shí)來(lái)提供會(huì)話的信息(如登錄憑證或者 clientId)

持久會(huì)話存儲(chǔ)什么?
  • session 信息,客戶端憑證
  • 客戶端所有訂閱信息
  • 所有客戶端未確認(rèn)的 QoS 級(jí)別為 1 或者 2 的消息
  • 客戶端在離線時(shí)所有錯(cuò)過(guò)的 QoS 級(jí)別為 1 或者 2 的消息
  • 所有從客戶端收到,尚未完全確認(rèn)的 QoS 2 的消息
那么如何開(kāi)始或者結(jié)束一個(gè)持久會(huì)話?

客戶端可以通過(guò) cleanSession 進(jìn)行標(biāo)記,來(lái)告訴 broker 代理自己需要怎樣的會(huì)話,在與代理建立連接時(shí)可以選擇請(qǐng)求持久會(huì)話。

cleanSession = true 非持久會(huì)話 如果客戶端請(qǐng)求非持久會(huì)話,那么當(dāng)客戶端與代理斷連時(shí)其前一個(gè)持久會(huì)話的所有排隊(duì)消息都將丟失。

cleanSession = false 持久會(huì)話 如果客戶端請(qǐng)求持久會(huì)話,代理服務(wù)端將保存會(huì)話的所有信息

最佳實(shí)戰(zhàn)

這里我們將會(huì)話分為: persistent session 持久會(huì)話clean session 清潔會(huì)話

何時(shí)使用 持久會(huì)話

  • 客戶端必須從某個(gè)主題獲取所有消息,即使其離線,也想通過(guò) broker 進(jìn)行消息排隊(duì),以便重新連接后立即傳送他們。
  • 客戶端資源有限,希望通過(guò)代理存儲(chǔ)其訂閱消息,并快速恢復(fù)中斷的通信。
  • 客戶端需要在重新連接后恢復(fù)所有 qos 1 或者 2 的消息。

何時(shí)使用 清潔會(huì)話

  • 客戶端只需要發(fā)布消息,不需要訂閱主題。客戶端不希望 broker 存儲(chǔ)消息或者重試 qos 1 或者 2 的傳輸。
  • 客戶端不需要獲取離線錯(cuò)過(guò)的消息。

2. 保留消息

為什么需要保留消息?

對(duì)于 消息發(fā)布者 和 主題訂閱者,雙方對(duì)于相互的狀態(tài)是無(wú)感知的,因?yàn)槲覀兊?broker 代理 代理了這一切,那么消息發(fā)布者只能確保消息正確的發(fā)送到了 broker 代理,而 broker 代理 和 主題訂閱者之間同樣如此。而 消息發(fā)布者 并不確定何時(shí)向?qū)?yīng)的主題發(fā)布消息,那在這期間,新訂閱主題的客戶端對(duì)該主題的狀態(tài)一無(wú)所知。這個(gè)時(shí)候,保留消息就起到的它的作用。

什么是保留消息?

保留消息 是 一條普通的 MQTT 消息 其 retained flag 設(shè)置為 true,broker 代理為主題存儲(chǔ)其最后一條保留消息以及其 Qos 級(jí)別。

那么每個(gè)訂閱匹配該主題的客戶端在訂閱后將立即收到該條 保留消息。代理僅存儲(chǔ)每個(gè)主題的一條保留消息。

訂閱客戶端 可以通過(guò) retained flag 來(lái)識(shí)別該條消息是否為 保留消息,以便決定如何處理它。

保留消息的作用

保留消息可以幫助 新訂閱的客戶端 立即獲得該主題的狀態(tài)更新,其消除了等待 發(fā)布客戶端 發(fā)布下一條消息的時(shí)間間隔。

最佳實(shí)戰(zhàn)

啊,那么我們什么時(shí)候應(yīng)該使用保留消息呢?當(dāng)你希望新訂閱的客戶端立即獲取主題消息時(shí),保留消息是有意義的

這對(duì)于單個(gè)組件主題的狀態(tài)更新非常有用,例如 /my/temperature 獲取溫度狀態(tài),如果使用保留消息,新訂閱者在訂閱時(shí)將立即獲取最后的溫度狀態(tài)。如果沒(méi)有使用,那么在發(fā)布者發(fā)布下一條消息期間,新訂閱者將處于黑暗狀態(tài)

3.遺囑

為什么需要遺囑?

MQTT 經(jīng)常構(gòu)建于不可靠的網(wǎng)絡(luò)場(chǎng)景,由于連接丟失,電量耗盡,可能會(huì)發(fā)生異常斷開(kāi)的情況。了解客戶端是 正常斷開(kāi)(MQTT DISCONNECT 消息) 還是 異常斷開(kāi) 有助于我們進(jìn)行正確的響應(yīng),這里遺囑消息就發(fā)揮了作用。

LWT 最后的遺囑 Last Will and Testament

在 MQTT 中使用 LWT 最后的遺囑來(lái)通知 其他客戶端 異常斷開(kāi)的情況。每個(gè)客戶端在連接到代理時(shí),可以指定 LWT

LWT 是一條普通的 MQTT 消息帶有 主題、保留消息標(biāo)志、QoS 和 payload。代理保存該消息直到客戶端異常斷開(kāi),此時(shí)代理會(huì)將 LWT 消息發(fā)送給每個(gè)訂閱該主題的客戶端。當(dāng)客戶端正常斷開(kāi)時(shí),LWT 消息會(huì)被代理直接丟棄。

如何指定 LWT?

在客戶端 CONNECT 時(shí),客戶端可以指定一條 LWT 消息

代理應(yīng)該在何時(shí)發(fā)送 LWT 消息?

根據(jù) MQTT 規(guī)范,borker 代理 必須在以下情況分發(fā) 客戶端 LWT 消息:

  • 代理檢測(cè)到 I/O 錯(cuò)誤或者網(wǎng)絡(luò)故障
  • 客戶端無(wú)法再定義的 Keep Alive 時(shí)間內(nèi)進(jìn)行通信
  • 客戶端在關(guān)閉網(wǎng)絡(luò)連接之前不會(huì)發(fā)送 DISCONNECT 數(shù)據(jù)包
  • 由于協(xié)議錯(cuò)誤,代理關(guān)閉連接

最佳實(shí)戰(zhàn)

最后的遺囑 LWT 是通知訂閱客戶端,發(fā)布客戶端異常斷開(kāi)的有效手段。其在生產(chǎn)上經(jīng)常和 保留消息一起配合使用,以存儲(chǔ)客戶端在特定主題上的狀態(tài)。

舉個(gè)例子:client1 首先向 broker 發(fā)送 CONNECT 數(shù)據(jù)包其中

lastWillMessage 將 ”offline“ 作為 payload

lastWillRetain 設(shè)置為 true

lastWillTopic 設(shè)置為 client1/status

連接之后 client1 再向主題發(fā)送一條 PUBLISH 消息,其 payload 為 ”online“ 并將其 retain flag 設(shè)置為 true。

此時(shí) 只要 client1保持連接,那么所有新訂閱主題的客戶端都會(huì)收到一條 ”online“ 消息。

如果 client1 異常斷開(kāi),broker 會(huì)給所有訂閱客戶端發(fā)送 ”offline“ 的 LWT 消息,同時(shí) LWT 消息會(huì)成為新的保留消息發(fā)送給新的訂閱者。

這種特定的保留消息模式,可以讓其他客戶端知道,client1 在特定主題上的連接狀態(tài)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/118877.html

相關(guān)文章

  • 如何構(gòu)建商業(yè)級(jí)別聊天系統(tǒng)MQTT (五)保活 Keep Alive,請(qǐng)不要讓你的 MQTT

    摘要:如何構(gòu)建商業(yè)級(jí)別聊天系統(tǒng)篇五保活,請(qǐng)不要讓你的服務(wù)變成小豬佩奇特關(guān)人上人擱淺神秘連接哥哥姐姐弟弟妹妹叔叔阿姨們說(shuō)點(diǎn)閑話保活,不光是對(duì)于來(lái)說(shuō)需要保活,其實(shí)我們很多的系統(tǒng),在需要確定對(duì)方是否處于可通信狀態(tài)的時(shí)候都是需要這種保活機(jī)制。 ...

    aboutU 評(píng)論0 收藏0
  • MQTT協(xié)議介紹

    摘要:協(xié)議簡(jiǎn)介,消息隊(duì)列遙測(cè)傳輸是一個(gè)輕量的發(fā)布訂閱模式消息傳輸協(xié)議,是專門針對(duì)低帶寬和不穩(wěn)定網(wǎng)絡(luò)環(huán)境的物聯(lián)網(wǎng)應(yīng)用設(shè)計(jì)的。它是等級(jí)協(xié)議交換的第二個(gè)報(bào)文。 1.MQTT協(xié)議簡(jiǎn)介 MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸)是一個(gè)輕量的發(fā)布/訂...

    lewinlee 評(píng)論0 收藏0
  • MQTT

    摘要:協(xié)議版本介紹互聯(lián)網(wǎng)的基礎(chǔ)網(wǎng)絡(luò)協(xié)議是協(xié)議消息隊(duì)列遙測(cè)傳輸是基于協(xié)議棧而構(gòu)建的已成為通信的標(biāo)準(zhǔn)為什么選擇有多好多好多么牛逼我就不說(shuō)了說(shuō)的再多不如一個(gè)一個(gè)試試完了做比對(duì)剩下的那個(gè)就是要選擇的實(shí)在不想這樣搞技術(shù)就跟著一線走發(fā)布和訂閱模型協(xié)議在網(wǎng)絡(luò)中 mqtt 協(xié)議版本: 3.1.1 MQTT 介紹 互聯(lián)網(wǎng)的基礎(chǔ)網(wǎng)絡(luò)協(xié)議是 TCP/IP協(xié)議. MQTT(消息隊(duì)列遙測(cè)傳輸)是基于 TCP/IP 協(xié)...

    lastSeries 評(píng)論0 收藏0
  • 基于MQTT的物聯(lián)網(wǎng)云測(cè)量解決方案

    摘要:本文是其中的一個(gè)解決方案。地址客戶端服務(wù)端前端網(wǎng)頁(yè)介紹,消息隊(duì)列遙測(cè)傳輸是開(kāi)發(fā)的一個(gè)即時(shí)通訊協(xié)議,有可能成為物聯(lián)網(wǎng)的重要組成部分。必須用于在頂層分隔符之后,除了當(dāng)自己指定時(shí)。 1. 問(wèn)題描述 最近,本實(shí)驗(yàn)室大量上馬云測(cè)量,云監(jiān)控方面的項(xiàng)目,大概是屬于物聯(lián)網(wǎng)應(yīng)用的一個(gè)分支。老板也有將舊有儀器改造的想法,所以要實(shí)現(xiàn)儀器設(shè)備的云控制。本文是其中的一個(gè)解決方案。 2. 技術(shù)選型 消息隊(duì)列:M...

    張金寶 評(píng)論0 收藏0
  • ESP32學(xué)習(xí)筆記(46)——MQTT客戶端

    摘要:一簡(jiǎn)介實(shí)現(xiàn)方式實(shí)現(xiàn)協(xié)議需要客戶端和服務(wù)器端通訊完成,在通訊過(guò)程中,協(xié)議中有三種身份發(fā)布者代理服務(wù)器訂閱者。其中,消息的發(fā)布者和訂閱者都是客戶端,消息代理是服務(wù)器,消息發(fā)布者可以同時(shí)是訂閱者。 ...

    Jenny_Tong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<