成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

aboutU / 2646人閱讀

摘要:如何構(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í)候都是需要這種?;顧C(jī)制。

【如何構(gòu)建商業(yè)級(jí)別聊天系統(tǒng)】 MQTT 篇(五)?;?Keep Alive,請(qǐng)不要讓你的 MQTT 服務(wù)變成小豬佩奇!

特關(guān)人上人!dying 擱淺 神秘連接
哥哥姐姐弟弟妹妹叔叔阿姨們~

說(shuō)點(diǎn)閑話

keep alive ?;睿还馐菍?duì)于 MQTT 來(lái)說(shuō)需要?;?,其實(shí)我們很多的系統(tǒng),在需要確定對(duì)方是否處于可通信狀態(tài)的時(shí)候都是需要這種?;顧C(jī)制。比如音頻聊天,那么音頻聊天的雙方和服務(wù)器端同樣也是需要一套 keep alive 保活的機(jī)制來(lái)確定雙方的狀態(tài)以便進(jìn)行相應(yīng)的處理。

了解 keep alive 對(duì)于系統(tǒng)設(shè)計(jì)來(lái)說(shuō)是具備指導(dǎo)性意義。

MQTT 的 Keep Alive ?;顧C(jī)制

為什么需要?;睿?/strong>

TCP 半開(kāi)連接問(wèn)題 half-open 。

首先 MQTT 是基于 TCP 協(xié)議的,那么 TCP 的特性同樣適用于 MQTT :可靠、有序、錯(cuò)誤檢測(cè)。

然而使用 TCP 連接的通信雙方之間的傳輸有時(shí)不會(huì)同步。

例如,通信過(guò)程中一方崩潰或者傳輸錯(cuò)誤,這種不完全連接的狀態(tài)稱為 ”half-open“

那么此時(shí)的問(wèn)題就是,通信雙方,一方崩潰并不會(huì)通知另一方,那么仍然連接的一方會(huì)繼續(xù)請(qǐng)求并等待回復(fù)。這顯然對(duì)于仍然連接的一方是體驗(yàn)很差的,或者說(shuō)不合理的。

對(duì)于此 MQTT 的發(fā)明者 Andy Stanford-Clark 是如此解釋的。

進(jìn)一步說(shuō)明規(guī)范的內(nèi)容,keepalive 的目的是讓應(yīng)用程序 級(jí)別(客戶端應(yīng)用程序和代理)可以知道底層連接仍然是端到端的。

盡管理論上 TCP/IP 會(huì)在 socket 中斷時(shí)通知你,但實(shí)際上,特別是在移動(dòng)和衛(wèi)星鏈接等情況下,通常會(huì)通過(guò)空中 “偽造” TCP 并在每一端放回標(biāo)頭,極有可能 TCP 會(huì)話到“黑洞”,即它似乎仍然打開(kāi),但實(shí)際上只是將你寫(xiě)入的任何內(nèi)容傾倒在地板上。

因此,keepalive 會(huì)確認(rèn)你確實(shí)仍在與代理交談(并且從代理端,客戶端確實(shí)仍處于連接狀態(tài)),特別是當(dāng)處于長(zhǎng)時(shí)間連接的連接上時(shí),或者訂閱了不常發(fā)布的主題,或在 qos0(即無(wú)確認(rèn))發(fā)布給 borker 代理。

應(yīng)使用(由 MQTT 庫(kù))從代理返回的響應(yīng)客戶端啟動(dòng)的“ping-req”的 ping-resp(“pong”?。﹣?lái)告訴應(yīng)用程序連接是否已消失,或觸發(fā)重新連接。

那么 MQTT 包含了這樣一個(gè) ”?;睢?的功能,該功能為 half-open 問(wèn)題提供了一個(gè)解決方案,或者說(shuō)一個(gè)評(píng)估連接是否斷開(kāi)的依據(jù)。

keep alive 確認(rèn) broker 代理 和 client 客戶端 之間的連接仍然打開(kāi),并且 broker 和 client 之間是可以感知到彼此是有連接的

具體操作就是,當(dāng)客戶端與服務(wù)端建立連接后,客戶端向服務(wù)端進(jìn)行以秒為間隔的通訊,這個(gè)時(shí)間間隔定義了,客戶端和服務(wù)器沒(méi)有通訊的最大時(shí)長(zhǎng)。

MQTT 這樣對(duì)其定義:

“The Keep Alive … is the maximum time interval that is permitted to elapse between the point at which the Client finishes transmitting one Control Packet and the point it starts sending the next. It is the responsibility of the Client to ensure that the interval between Control Packets being sent does not exceed the Keep Alive value. In the absence of sending any other Control Packets, the Client MUST send a PINGREQ Packet.”

即: keep alive 是客戶端完成發(fā)送數(shù)據(jù)包的時(shí)間點(diǎn)到下一個(gè)發(fā)送數(shù)據(jù)包的時(shí)間點(diǎn)所允許經(jīng)過(guò)的最大時(shí)間間隔,準(zhǔn)確發(fā)送 PINGREQ 數(shù)據(jù)包是客戶端的責(zé)任。

只要消息交換頻繁,且在 keep alive 所定義的時(shí)間范圍內(nèi),就不需要發(fā)送額外的消息來(lái)確認(rèn)連接。

但如果,在此期間,客戶端沒(méi)有發(fā)送消息,它必須發(fā)送一個(gè) PINGREQ 數(shù)據(jù)包 來(lái)確認(rèn) 客戶端和代理雙方都是可用的狀態(tài)。

代理如果在 1.5 倍的 keep alive 時(shí)間間隔中 沒(méi)有收到客戶端的任何消息或者 PINGREQ ?;顢?shù)據(jù)包,則斷開(kāi)客戶端連接。同樣的對(duì)于 客戶端,在合理的時(shí)間內(nèi)沒(méi)有收到代理的響應(yīng)也應(yīng)該關(guān)閉連接。

Keep Alive Flow

keep alive 功能使用兩個(gè)數(shù)據(jù)包來(lái)保證: PINGREQ 和 PINGRESP

PINGREQ 由客戶端發(fā)送,無(wú)有效負(fù)載,客戶端可以在任何時(shí)候發(fā)送該包來(lái)確認(rèn)連接狀態(tài)。

當(dāng)服務(wù)端收到 PINGREQ 數(shù)據(jù)包時(shí),必須回復(fù)一個(gè) PINGRESP 數(shù)據(jù)包來(lái)表示其仍然可用,同樣的 PINGRESP 也不包含有效負(fù)載

必須要知道的事

  • 如果客戶端在 keep alive 的時(shí)間段內(nèi) 沒(méi)有發(fā)送任何數(shù)據(jù)包或者 PINGREQ 給服務(wù)端代理,則代理關(guān)閉連接,并且發(fā)送 LWT 最后的遺囑消息 (如果客戶端有設(shè)置的話)
  • MQTT 客戶端有責(zé)任設(shè)置合適的 keep alive 值。例如可以根據(jù)當(dāng)前信號(hào)的強(qiáng)度來(lái)調(diào)整 keep alive 的時(shí)間間隔。
  • 最大的 keep alive 間隔為 18h 12min 15 sec。如果 keep alive 的間隔為 0 則 keep alive 機(jī)制是無(wú)效的。

Client Task-Over 客戶端接管

通常,客戶端斷開(kāi)連接后可能會(huì)重新連接。有時(shí) broker 服務(wù)器仍然會(huì)提供 half-open 半開(kāi)連接給客戶端(如在 1.5 倍的 keep alive 間隔內(nèi),客戶端嘗試斷線重連,此時(shí)就會(huì)有兩個(gè)客戶端連接),在 MQTT 中,如果 broker 代理檢測(cè)到了 半開(kāi)連接,則會(huì)執(zhí)行 客戶端接管,borker 會(huì)斷開(kāi)先前的連接,并和客戶端建立新的連接,這一行為保證了 半開(kāi)連接 不會(huì)阻止客戶端斷線重連。

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

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

相關(guān)文章

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

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

    LancerComet 評(píng)論0 收藏0
  • 如何做一個(gè)自己的開(kāi)源聊天項(xiàng)目?(仿微信)

    摘要:一個(gè)輕量級(jí)高效率的支持聊天與物聯(lián)網(wǎng)的通訊框架從月初到現(xiàn)在已經(jīng)大約已經(jīng)三個(gè)月了,由于一直沒(méi)有時(shí)間與精力很好的維護(hù)這個(gè)項(xiàng)目,心里一直有所歉意。希望本項(xiàng)目對(duì)你有所幫助,我的目標(biāo)暫定,一個(gè)小眾加物聯(lián)網(wǎng)的開(kāi)源通訊項(xiàng)目。 篇幅較長(zhǎng),感謝閱讀。 萬(wàn)事開(kāi)頭難 在我決定做開(kāi)源是因?yàn)樽陨砉ぷ鹘佑|到大多數(shù)的項(xiàng)目都是基于開(kāi)源大佬寫(xiě)的框架,自覺(jué)慚愧,工作以來(lái)一直忙于業(yè)務(wù)與功能實(shí)現(xiàn),多多少少做過(guò)的幾個(gè)項(xiàng)目也沒(méi)能抽...

    Zachary 評(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
  • 【基于Arduino IDE平臺(tái)開(kāi)發(fā)ESP8266連接巴法云】

    摘要:教程傳送門(mén)基于平臺(tái)開(kāi)發(fā)連接巴法云簡(jiǎn)介實(shí)驗(yàn)準(zhǔn)備硬件軟件實(shí)驗(yàn)步驟點(diǎn)燈實(shí)驗(yàn)發(fā)送溫濕度指令升級(jí)總結(jié)關(guān)于巴法云專注于開(kāi)源,智造,創(chuàng)新,分享。 Arduino教程傳送門(mén)????...

    不知名網(wǎng)友 評(píng)論0 收藏0

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

0條評(píng)論

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