天天看點

MQTT 折騰筆記----協定簡讀

對于需要要了解一個什麼玩意,我們需要這玩意,解決我們什麼事情.從WIKI 來看MQTT 協定主要解決的是機器與機器之間資料通信,各位想到什麼沒?有接觸過物聯網的話,可能有所了解了,當我們所有機器都能在一個網絡上面配置設定的一個位址的話,由于,裝置間的性能差異,低到可能就是一個插座,而你需要這個插座能進行資料通信,例如,控制這個插座的開-閉這類的,就需要一個極其輕量級的協定而MQTT 協定就是為此目的誕生的.

即時傳輸的輕量級協定

專門設計用于低帶寬或者高昂的網絡費用

具備三種服務品質層級

MQTT 協定相對某些協定來說,實在是簡短的令人發指,整個協定隻用42頁就說完了.

MQTT v3 到 v3.1 有幾點比較重要的變化個人感覺最重要的是從ascii 碼轉向 utf8的支援,不過我估計沒人用過v3 所有我這裡不多說了,有興趣的,請翻閱一下協定文檔.....

MQTT 最引以為豪的就是最小的2 byte 頭部傳輸開銷.我們看下其他流行的協定的message format的設計

<code>|--------------------| | &lt;stream&gt; | |--------------------| | &lt;presence&gt; | | &lt;show/&gt; | | &lt;/presence&gt; | |--------------------| | &lt;message to='foo'&gt; | | &lt;body/&gt; | | &lt;/message&gt; | |--------------------| | &lt;iq to='bar'&gt; | | &lt;query/&gt; | | &lt;/iq&gt; | |--------------------| | ... | |--------------------| | &lt;/stream&gt; | |--------------------|</code>

<a href="https://tools.ietf.org/html/rfc2616">HTTP</a>

HTTP-message = Request | Response ; HTTP/1.1 messages

還有很多協定,就不一樣細說了,就舉兩個我比較了解的.就目前通用的協定來看很少有比MQTT 還要低的傳輸開銷了.如果,你有了解的希望介紹一下.

bit

7

6

5

4

3

2

1

byte 1

Message Type

DUP flag

QoS level

RETAIN

byte 2

Remaining Length

第一個byte 用于說明消息體的資訊.

第二個byte 用于傳輸我們需要傳輸的資料.

<a href="http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#msg-format">更多詳情請看協定 msg-format 部分</a>

接下來,結合一個最簡例子來對這個消息體進行說明

為了友善進行MQTT的了解與使用,目前MQTT的資料極其匮乏,也找不到什麼給力的例子是以,随着我研究的深度,來慢慢提高這些例子的難度.

準備

服務端:

用戶端:

為了簡單,友善了解,這個例子:

伺服器是一個廣播模型

對于訂閱/釋出沒有限制使用topic(主要是為了後面的知識做準備)

訂閱者擷取到一次釋出者消息就斷開連接配接

首先服務端啟動,接着啟動 mqttClientSub

例子流程圖: clientA -&gt;(connect) server

啟動釋出者:mqttClientPub

例子流程圖: clientB -&gt;(publish) server -&gt;(pub) clientA

以上就是整個例子的流程

版權聲明:原創作品,如需轉載,請注明出處。否則将追究法律責任

本文轉自 liam2199 部落格,原文連結: 

http://blog.51cto.com/youxilua/1186126

  如需轉載請自行聯系原作者

繼續閱讀