在线乱码卡一卡二卡新HD,最近韩国免费观看视频,国产色无码精品视频国产,亚洲男人的天堂久久香蕉

一文了解MQTT協議
來源:Java極客技術    時間:2022-02-25 07:29:05

我們今天就來詳細的說說這個 MQTT 協議,因為很多消息現在都是支持 MQTT 協議的,比如 RabbitMQ ,還有 Kafka 等,今天我們就來詳細的介紹 MQTT 協議到底是個什么。

什么是MQTT協議

MQTT協議是一種消息列隊傳輸協議,采用訂閱、發布機制,訂閱者只接收自己已經訂閱的數據,非訂閱數據則不接收,既保證了必要的數據的交換,又避免了無效數據造成的儲存與處理。因此在在物聯網領域,傳感器與服務器的通信,信息的收集中得到廣泛的應用。

既然是協議,那么如果對比 TCP/IP協議的話,它位于分層中的哪一層呢?

之前阿粉就說了 TCP/IP 參考模型可以分為四層:應用層、運輸層、網絡層、網絡接口層。TCP和UDP位于運輸層,應用層常見的協議有HTTP、FTP、SSH等。而 MQTT 協議運行于 TCP 之上,屬于應用層協議,因此只要是支持TCP/IP協議棧的地方,都可以使用MQTT。

MQTT協議主要特性

1)開放消息協議,簡單易實現。

2)使用發布/訂閱消息模式,提供一對多的消息發布,解除應用程序耦合。

3)對負載(協議攜帶的應用數據)內容屏蔽的消息傳輸。

4)基于TCP/IP網絡連接,提供有序,無損,雙向連接。

主流的MQTT是基于TCP連接進行數據推送的,但是同樣有基于UDP的版本,叫做MQTT-SN。這兩種版本由于基于不同的連接方式,優缺點自然也就各有不同了。

5)消息服務質量(QoS)支持,可靠傳輸保證;有三種消息發布服務質量:

QoS0:"至多一次",消息發布完全依賴底層TCP/IP網絡。會發生消息丟失或重復。這一級別可用于如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發送。這一種方式主要普通APP的推送,倘若你的智能設備在消息推送時未聯網,推送過去沒收到,再次聯網也就收不到了。

QoS1:"至少一次",確保消息到達,但消息重復可能會發生。

QoS2:"只有一次",確保消息到達一次。在一些要求比較嚴格的計費系統中,可以使用此級別。在計費系統中,消息重復或丟失會導致不正確的結果。這種最高質量的消息發布服務還可以用于即時通訊類的APP的推送,確保用戶收到且只會收到一次。

這個 Qos0 是個什么意思呢?就是如果使用了這個 Qos0 的配置作為發布質量,我們以客戶端和服務器為例,那就是客戶端發了一個消息給服務端,這時候服務端沒有接收到,而配置是 "至多一次",這時候,相同的消息,客戶端就不會再繼續給服務端發送了,我管你收沒收到,我配置的就是最多一次.

同理,QoS1 是至少一次,也就是說,客戶端給服務端發送消息的時候,如果沒有保證消息到達,這時候可能會繼續發送,我才不管我發幾次,只要你沒有給我說你收到消息,那我就發!

而 QoS2 相對來說就是比較嚴謹的了,為什么這么說,這就相當于客戶端給服務端發送消息,這時候,要求保證客戶端發了一次,而服務端收到一次,這樣才是相當于只有一次的概念。

6)小型傳輸,開銷很小(固定長度的頭部是2字節),協議交換最小化,以降低網絡流量。

這就是為什么在介紹里說它非常適合"在物聯網領域,傳感器與服務器的通信,信息的收集",要知道嵌入式設備的運算能力和帶寬都相對薄弱,使用這種協議來傳遞消息再適合不過了。

MQTT 報文固定報頭(fixed header) 所有報文都包含可變報頭(variable header) 部分報文包含荷載(payload)部分報文包含

固定報頭格式如下:

固定報頭的0-3位為標志位,第一字節的4-7位的值指定了報文類型。

報文類型

描述

CONNECT

1

客戶端向代理發起連接請求

CONNACK

2

連接確認

PUBLISH

3

發布消息

PUBACK

4

發布確認

PUBREC

5

發布收到(QoS2)

PUBREL

6

發布釋放(QoS2)

PUBCOMP

7

發布完成(QoS2)

SUBSCRIBE

8

客戶端向代理發起訂閱請求

SUBACK

9

訂閱確認

UNSUBSCRIBE

10

取消訂閱

UNSUBACK

11

取消訂閱確認

PINGREQ

12

PING請求

PINGRESP

13

PING響應

DISCONNECT

14

斷開連接

實際上 這些類型也是 MQTT協議中定義的一些方法(也被稱為動作),來于表示對確定資源所進行操作。這個資源可以代表預先存在的數據或動態生成數據,這取決于服務器的實現。通常來說,資源指服務器上的文件或輸出。

MQTT協議實現方式

實現MQTT協議需要客戶端和服務器端通訊完成,在通訊過程中,MQTT協議中有三種身份:發布者(Publish)、代理(Broker)(服務器)、訂閱者(Subscribe)。其中,消息的發布者和訂閱者都是客戶端,消息代理是服務器,消息發布者可以同時是訂閱者。

MQTT傳輸的消息分為:主題(Topic)和負載(payload)兩部分:

1)Topic,可以理解為消息的類型,訂閱者訂閱(Subscribe)后,就會收到該主題的消息內容 (payload)

2)payload,可以理解為消息的內容,是指訂閱者具體要使用的內容(限制大小)。

MQTT 基于訂閱與發布的消息模型

MQTT 消息發送與接收的流程:

ClientA 鏈接到 Broker;ClientB 鏈接到 Broker,并訂閱主題 Topic1;ClientA 發送給 Broker 一條消息,主題為 Topic1;Broker 收到 ClientA 的消息,發現 ClientB 訂閱了 Topic1,而后將消息轉發到 ClientB;ClientB 從 Broker 接收到該消息。

和傳統的隊列有點不一樣,若是 ClientB 在 ClientA 發布消息以后再訂閱 Topic1,ClientB 不會收到該條消息。

關于 MQTT 的基礎,阿粉就了解了這么多了,等以后阿粉學習新的關于 MQTT 的,阿粉再繼續分享給大家。

關鍵詞: 服務器的 發送消息 服務質量 發布消息 可以使用

上一篇:

下一篇:

<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>