亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

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

LancerComet / 3110人閱讀

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

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

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

1. 持久會(huì)話(huà)

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

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

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

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

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

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

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

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

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

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

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

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

2. 保留消息

為什么需要保留消息?

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

什么是保留消息?

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

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

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

保留消息的作用

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

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

啊,那么我們什么時(shí)候應(yīng)該使用保留消息呢?當(dāng)你希望新訂閱的客戶(hù)端立即獲取主題消息時(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)的情況。了解客戶(hù)端是 正常斷開(kāi)(MQTT DISCONNECT 消息) 還是 異常斷開(kāi) 有助于我們進(jìn)行正確的響應(yīng),這里遺囑消息就發(fā)揮了作用。

LWT 最后的遺囑 Last Will and Testament

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

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

如何指定 LWT?

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

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

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

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

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

最后的遺囑 LWT 是通知訂閱客戶(hù)端,發(fā)布客戶(hù)端異常斷開(kāi)的有效手段。其在生產(chǎn)上經(jīng)常和 保留消息一起配合使用,以存儲(chǔ)客戶(hù)端在特定主題上的狀態(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保持連接,那么所有新訂閱主題的客戶(hù)端都會(huì)收到一條 ”online“ 消息。

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/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)閑話(huà)保活,不光是對(duì)于來(lái)說(shuō)需要?;?,其實(shí)我們很多的系統(tǒng),在需要確定對(duì)方是否處于可通信狀態(tài)的時(shí)候都是需要這種?;顧C(jī)制。 ...

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

    摘要:協(xié)議簡(jiǎn)介,消息隊(duì)列遙測(cè)傳輸是一個(gè)輕量的發(fā)布訂閱模式消息傳輸協(xié)議,是專(zhuān)門(mén)針對(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ù)就跟著一線(xiàn)走發(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è)解決方案。地址客戶(hù)端服務(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客戶(hù)端

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

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

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

0條評(píng)論

閱讀需要支付1元查看
<