對于需要要了解一個什麼玩意,我們需要這玩意,解決我們什麼事情.從WIKI 來看MQTT 協定主要解決的是機器與機器之間資料通信,各位想到什麼沒?有接觸過物聯網的話,可能有所了解了,當我們所有機器都能在一個網絡上面配置設定的一個位址的話,由于,裝置間的性能差異,低到可能就是一個插座,而你需要這個插座能進行資料通信,例如,控制這個插座的開-閉這類的,就需要一個極其輕量級的協定而MQTT 協定就是為此目的誕生的.
即時傳輸的輕量級協定
專門設計用于低帶寬或者高昂的網絡費用
具備三種服務品質層級
MQTT 協定相對某些協定來說,實在是簡短的令人發指,整個協定隻用42頁就說完了.
MQTT v3 到 v3.1 有幾點比較重要的變化個人感覺最重要的是從ascii 碼轉向 utf8的支援,不過我估計沒人用過v3 所有我這裡不多說了,有興趣的,請翻閱一下協定文檔.....
MQTT 最引以為豪的就是最小的2 byte 頭部傳輸開銷.我們看下其他流行的協定的message format的設計
<code>|--------------------| | <stream> | |--------------------| | <presence> | | <show/> | | </presence> | |--------------------| | <message to='foo'> | | <body/> | | </message> | |--------------------| | <iq to='bar'> | | <query/> | | </iq> | |--------------------| | ... | |--------------------| | </stream> | |--------------------|</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 ->(connect) server
啟動釋出者:mqttClientPub
例子流程圖: clientB ->(publish) server ->(pub) clientA
以上就是整個例子的流程
版權聲明:原創作品,如需轉載,請注明出處。否則将追究法律責任
本文轉自 liam2199 部落格,原文連結:
http://blog.51cto.com/youxilua/1186126
如需轉載請自行聯系原作者