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


 

導言

第一次聽說MQTT 這玩意是由於要找個做手機推送的方案,后來發現,JPush這家伙做的實在不錯,然后就不折騰了,最近,忽然心血來潮,把MQTT 協議 看了一遍,網上的很多中文的資料都是坑爹的,全部都是說MQTT 做推送,我按圖索驥全部都是轉載翻譯自老外2010寫的這篇文章實在汗顏...后來,我改用全英文關鍵字,搜索總算發現了MQTT 的用處.如果,你不願意看我的長篇大論我建議你去wiki那里看下 MQTT 詳細介紹

MQTT 解決什么事情?

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

比較有趣的是,MQTT這個協議在1999 年就有了最新的版本是v3.1(2010/12/06),其適用於如下但不限於這幾點:

  1. 即時傳輸的輕量級協議
  2. 專門設計用於低帶寬或者高昂的網絡費用
  3. 具備三種服務品質層級

MQTT 協議簡讀

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

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

傳輸開銷的比較

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

  • XMPP 消息體用的是xml

    |--------------------| | <stream> | |--------------------| | <presence> | | <show/> | | </presence> | |--------------------| | <message to='foo'> | | <body/> | | </message> | |--------------------| | <iq to='bar'> | | <query/> | | </iq> | |--------------------| | ... | |--------------------| | </stream> | |--------------------|

  • HTTP

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

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

消息體的設計簡說

bit 7 6 5 4 3 2 1 0
byte 1 Message Type DUP flag QoS level RETAIN
byte 2 Remaining Length

第一個byte 用於說明消息體的信息.

第二個byte 用於傳輸我們需要傳輸的數據.

更多詳情請看協議 msg-format 部分

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

MQTT 最簡例子

為了方便進行MQTT的了解與使用,目前MQTT的資料極其匱乏,也找不到什么給力的例子所以,隨着我研究的深度,來慢慢提高這些例子的難度.

准備

服務端:

客戶端:

例子地址:https://github.com/youxiachai/mqttlesson/tree/master/LessonOne java 版本暫未提供,晚些時候寫個android的客戶端....

例子設計

為了簡單,方便理解,這個例子:

  1. 服務器是一個廣播模型
  2. 對於訂閱/發布沒有限制使用topic(主要是為了后面的知識做准備)
  3. 訂閱者獲取到一次發布者消息就斷開連接

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

例子流程圖: clientA ->(connect) server

  1. 啟動發布者:mqttClientPub

例子流程圖: clientB ->(publish) server ->(pub) clientA 以上就是整個例子的流程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM