轉戰物聯網·基礎篇06-深刻理解MQTT協議之基本術語

  經過上一節咱們對MQTT協議已經有了初步的印象,這一節咱們開始深刻的理解一下MQTT協議,介紹經常使用的MQTT 3.1.1版本,5.0版本後面指介紹新增部分便可。這一節咱們先介紹MQTT裏經常使用的術語(非官方文檔直接複製)。數據庫

  網絡鏈接(Network Connection):
  MQTT 是一種鏈接協議,底層使用 TCP/IP (傳輸層協議)提供網絡鏈接,提供有序、可靠的、雙向字節流傳輸。這個鏈接須要互聯網通訊的基礎設施支撐,客戶端使用它鏈接到服務端(MQTT代理服務的服務器或服務器集羣)。服務器

  會話(Session):
  客戶端與服務端經過網絡鏈接後的信息通道,服務端會有一個惟一的標誌識別,也是狀態交互的反映。一般一個會話就是一個網絡鏈接,有些網絡環境也可能將一個會話會擴展幾個網絡鏈接爲之服務。網絡

  應用消息(Application Message):
  使用MQTT協議經過網絡鏈接傳輸的應用數據,也就是客戶端與服務端之間交互的應用數據。應用消息經過MQTT傳輸時, 會有攜帶服務質量(QoS)和主題(Topic)等信息內容的。框架

  服務端(Server) / 代理(Broker):
  一個服務程序或設備,爲消息發送方和消息訂閱方提供中介服務,爲發送方和訂閱方提供中轉分配處理,這個服務程序也稱之爲代理(Broker)。要處理來自客戶端的網絡鏈接、發佈的應用消息,處理保存客戶端的訂閱和取消訂閱,將應用消息轉發給符合訂閱條件的客戶端,關閉客戶端發出斷開鏈接請求的網絡鏈接等。ui

  客戶端(Client):
  是與服務端對應的,使用MQTT爲客戶提供本地服務的程序或設備。客戶端老是先發起鏈接請求經過網絡鏈接到服務端。它能夠:打開鏈接到服務端的網絡鏈接、經過服務端發佈應用消息給其餘相關的客戶端、訂閱並接收相關的應用消息、取消訂閱並再也不接收相應消息、關閉與服務端的網絡鏈接等。代理

  主題(Topic):
  標註應用程序消息的標籤,訂閱者用它來肯定接收到所關心的消息,服務端代理服務會將消息轉發給訂閱者所匹配標籤的每一個客戶端。主題名是一個分層的結構,能夠有多個級別,級別之間用斜槓分隔。例:area-a/building-6/floor-8 表明A區6棟5層的設備發出的主題。
  訂閱者的主題名支持通配符#和+,能夠經過通配符進行匹配過濾:
  +爲只匹配主題一個層級的通配符,例:area-a/+/floor-8 表明A區任何一個樓的8層的設備。
  #爲匹配主題該層級向後任意級別的通配符,例:area-a/# 表明A區的所用設備。ip

  發佈(Publish):
  從MQTT客戶端向MQTT服務端主動發送主題消息,或MQTT服務端向MQTT客戶端主動發送主題消息(這種狀況不多)。主題消息中包含着服務質量(QoS)等級。文檔

  訂閱(Subscription):
  訂閱的過程與咱們生活中向郵局訂閱雜誌相似,只不過是客戶端向服務端訂閱,訂閱的是主題消息而不是雜誌。當服務端的代理服務發現有客戶端發佈了某客戶端訂閱的主題消息時,就會把該主題消息轉發給訂閱了該主題消息的那個客戶端。訂閱的主題會與某個單一會話(Session)關聯,一個會話能夠關聯多個訂閱。每一個訂閱都包含一個主題過濾器(Topic Filter)和一個最大的服務質量(QoS)等級。字符串

  主題過濾器(Topic Filter):
  是一個針對主題名過濾的篩選器,在訂閱表達式中使用,表示訂閱所匹配到的一個或多個主題。io

  服務質量(QoS):
  表示發佈者發佈的主題到達代理和目標客戶端的可靠性要求,MQTT服務質量分三個等級:
  QoS =0,至多一次,有可能會丟包,通常用在對實時性要求不高而且會有新的數據覆蓋舊的數據的場景。例如,某個溫度傳感器的數據上報,間隔必定時間上報一次,每次都更新服務端數據庫中的記錄。這樣對因而否丟失某次上報的數據並不過重要,由於稍候還會上報新的數據上來更新到最新。
  QoS =1,至少一次,確保到達目的地,可是有可能出現數據重複發送的現象,訂閱者可能會收到重複的數據包。
  QoS =2, 恰好一次,確保到達目的地,而且不會出現數據重複發送的現象。

  遺囑消息(Will Message):
  遺囑消息通常是在客戶端 發起鏈接的時候指定的。是客戶端預先定義好的一個主題消息,表明在本身異常斷開的狀況下,所留下的最後遺願(Last Will),也稱之爲遺囑。在客戶端鏈接出現異常的狀況下,由服務端代理服務主動發佈此消息,訂閱此消息的其餘客戶端就收到了這個客戶端離線的遺囑消息了。也就是你但願一個客戶端離線後,用什麼信息內容通知關心這個客戶端離線的其餘客戶端。

  控制報文 (MQTT Control Packet):
  在MQTT協議框架下經過網絡鏈接發送的信息數據包。MQTT規範定義了十四種不一樣類型的控制報文,其中PUBLISH報文是用於傳輸發佈應用消息的。控制報文中最多包含三部分,依次分別是固定報頭、可變報頭、有效載荷。

  固定報頭(Fixed header):
  是控制報文的最開始部分,表明着這個報文的具體做用和其餘一些控制配置信息等。固定報頭長度固定爲2個字節起,後面會有詳解。

  可變報頭(Variable header):
  一個控制報文須要攜帶的控制信息量較多,就在固定報頭後面增長了可變報頭,通常也是2個字節長度,後面會有詳解。

  有效載荷(Payload):
  是控制報文的最後一部分,包含主題名和咱們須要攜帶的自定義的應用消息。例如咱們要經過MQTT協議發送一個字符串「hello」,那這個「hello」字符串就是在有效載荷部分。

  心跳(PINGREQ):
  是爲了保證服務端知道客戶端的鏈接還在正常保持着,在沒有必要的應用消息發出的時候,會在必定時間間隔發出一個很短的特定數據包,用於通知服務端,這個客戶端鏈接正常。在沒有業務邏輯須要主動發佈消息的時候,網絡鏈接就是靠這個有着固定時間間隔規律的數據包發送來維持鏈接正常的,這就像心臟跳動同樣,有心跳知道這我的還活着,所以而得名!

  本節完,待續......

相關文章
相關標籤/搜索