您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何理解MQTT協(xié)議及協(xié)議原理,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
MQTT協(xié)議
MQTT協(xié)議全稱是Message Queuing Telemetry Transport,翻譯過來就是消息隊列遙測傳輸協(xié)議,它是物聯(lián)網(wǎng)常用的應(yīng)用層協(xié)議,運行在TCP/IP中的應(yīng)用層中,依賴TCP協(xié)議,因此它具有非常高的可靠性,同時它是基于TCP協(xié)議的 <客戶端-服務(wù)器> 模型發(fā)布/訂閱主題消息的輕量級協(xié)議,也是我們常說的發(fā)送與接收數(shù)據(jù),下面我們來初步了解一下mqtt相關(guān)的名稱與功能。
MQTT最大的優(yōu)點在于可以以極少的代碼和有限的帶寬,為遠程設(shè)備提供實時可靠的消息服務(wù)。作為一種低開銷、低帶寬占用的即時通訊協(xié)議,MQTT在物聯(lián)網(wǎng)、小型設(shè)備、移動應(yīng)用等方面有廣泛的應(yīng)用。
眾所周知,TCP/IP參考模型可以分為四層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層。TCP和UDP位于傳輸層,應(yīng)用層常見的協(xié)議有HTTP、FTP、SSH等。MQTT協(xié)議運行于TCP之上,屬于應(yīng)用層協(xié)議,因此只要是支持TCP/IP協(xié)議棧的地方,都可以使用MQTT。
MQTT 協(xié)議提供一對多的消息發(fā)布,可以降低應(yīng)用程序的耦合性,用戶只需要編寫極少量的應(yīng)用代碼就能完成一對多的消息發(fā)布與訂閱,該協(xié)議是基于<客戶端-服務(wù)器>模型,在協(xié)議中主要有三種身份:發(fā)布者(Publisher)、服務(wù)器(Broker)以及訂閱者(Subscriber)。其中,MQTT消息的發(fā)布者和訂閱者都是客戶端,服務(wù)器只是作為一個中轉(zhuǎn)的存在,將發(fā)布者發(fā)布的消息進行轉(zhuǎn)發(fā)給所有訂閱該主題的訂閱者;發(fā)布者可以發(fā)布在其權(quán)限之內(nèi)的所有主題,并且消息發(fā)布者可以同時是訂閱者,實現(xiàn)了生產(chǎn)者與消費者的脫耦,發(fā)布的消息可以同時被多個訂閱者訂閱。
MQTT通信模型示意圖如下:
發(fā)布消息給其它相關(guān)的客戶端。
訂閱主題請求接收相關(guān)的應(yīng)用消息。
取消訂閱主題請求移除接收應(yīng)用消息。
從服務(wù)端終止連接。
MQTT 服務(wù)器常被稱為 Broker(消息代理),它一般為云服務(wù)器,比如BTA三巨頭的一些物聯(lián)網(wǎng)平臺就是常使用MQTT協(xié)議,它是位于消息發(fā)布者和訂閱者之間,以便用于接收消息并發(fā)送到訂閱者之中,它的功能有:
接受來自客戶端的網(wǎng)絡(luò)連接請求。
接受客戶端發(fā)布的應(yīng)用消息。
處理客戶端的訂閱和取消訂閱請求。
轉(zhuǎn)發(fā)應(yīng)用消息給符合條件的已訂閱客戶端(包括發(fā)布者自身)。
什么是主題?MQTT服務(wù)器為每個連接的客戶端(訂閱者)添加一個標(biāo)簽,該標(biāo)簽與服務(wù)器中的所有訂閱相匹配,服務(wù)器會將消息轉(zhuǎn)發(fā)給與標(biāo)簽相匹配的每個客戶端(訂閱者),當(dāng)然訂閱者也是需要有權(quán)限才能訂閱對應(yīng)的主題,比如像阿里云中的,訂閱者只能訂閱同一個產(chǎn)品下的主題,而不能跨產(chǎn)品訂閱,這樣子的處理就能達到信息的安全性以及多個訂閱者能及時收到消息。一個主題可以有多個級別,各個級別之間用斜杠字符分隔,例如/test 和 /test/test1/test2都 是有效的主題。
發(fā)布者與訂閱者可以通過主題名字,一般為UTF-8編碼(反正用英文字符串就不會錯)的形式發(fā)布和訂閱主題,比如我們可以直接定義一個名字為“test”的主題,絕大多數(shù)的MQTT服務(wù)器支持動態(tài)發(fā)布/訂閱主題,即當(dāng)前服務(wù)器中沒有某個主題,但是客戶端直接可以向該主題發(fā)布/訂閱消息,這樣子服務(wù)器就會創(chuàng)建對應(yīng)的主題,當(dāng)然,服務(wù)器中一般也會默認提供多個系統(tǒng)主題,所有連接的客戶端均可訂閱。
每個客戶端與服務(wù)器建立連接后就是一個會話,客戶端和服務(wù)器之間會有狀態(tài)交互,訂閱是基于會話之上,每個訂閱中,都會包含一個主題過濾器,它是一個表達式,用于標(biāo)識訂閱相關(guān)的一個或多個主題,主題過濾器可以使用通配符,因此訂閱者需要指定訂閱的主題名字與服務(wù)質(zhì)量(QoS),訂閱者能訂閱多個主題,也就能接收到多個發(fā)布者發(fā)布的消息。同理,發(fā)布者也需要首先與服務(wù)器建立會話,并且指定發(fā)送的主題名字與服務(wù)質(zhì)量,同時它也能向多個不同的主題發(fā)送消息。
那么什么是服務(wù)質(zhì)量呢?MQTT的服務(wù)質(zhì)量提供3個等級:
QoS0:最多發(fā)送一次消息,在消息發(fā)送出去后,接收者不會發(fā)送回應(yīng),發(fā)送者也不會重發(fā)消息,消息可能送達一次也可能根本沒送達,這個服務(wù)質(zhì)量常用在不重要的消息傳遞中,因為即使消息丟了也沒有太大關(guān)系。
QoS1:最少發(fā)送一次消息(消息最少需要送達一次,也有可送達多次),QoS 1的PUBLISH報文的可變報頭中包含一個報文標(biāo)識符,需要PUBACK報文確認。即需要接收者返回PUBACK應(yīng)答報文。
QoS2:這是最高等級的服務(wù)質(zhì)量,消息丟失和重復(fù)都是不可接受的,只不過使用這個服務(wù)質(zhì)量等級會有額外的開銷,這個等級常用于支付中,因為支付是必須有且僅有一次成功,總不能沒給錢或者給了多次錢吧。
關(guān)于如何理解MQTT協(xié)議及協(xié)議原理就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。