MQTT協議筆記之mqtt.io項目TCP協議支持
前言
MQTT定義了物聯網傳輸協議,其標準傾向于原始TCP實現。構建于TCP的上層協議堆棧,諸如HTTP等,在空間上多了一些處理路徑,稍微耗費了CPU和內存,雖看似微乎其微,但對很多處理能力不足的嵌入式設備而言,選擇原始的TCP卻是最好的選擇。
但單純TCP不是所有物件聯網的最佳選擇,提供構建與TCP基礎之上的傳統的HTTP通信支持,尤其是瀏覽器、性能富裕的桌面涉及領域,還是企業最 可信賴、最可控的傳輸方式之一。支持多種多樣的連接通道,讓目前所有一切皆可聯網,除了原始TCP Socket,還要支持構建于其之上的HTTP、HTML5 Websocket,就很有必要。
mqtt.io,Pub/Sub中間件,也可以稱之為推送服務器,涵蓋所有主流桌面系統、瀏覽器平臺,并且傾斜 于移動互聯網,以及物聯網的廣闊適應天地。使用一句英文概括可能更為合適:"Make everything connect”,讓所有物件都可連接。其業務目標,可用下圖概括:
mqtt.io致力于做下一代支持所有主流桌面平臺、所有主流瀏覽器、所有可聯網物件都可以聯網的PUB/SUB消息推送系統。
構建此系統,在于降低傳統企業各自分散的推送系統,統一運營,統一管理,節省人員、運維開支。
注意事項
- mqtt.io是一個項目名稱,沒有官網,http://www.mqtt.io,和這個項目沒有一毛錢關系。
- 項目地址:https://github.com/yongboy/mqtt.io,
- 項目名稱啟發于 http://socket.io http://netty.io 等知名framework。
- 目前只實現QoS 0基本特性,實現概覽,后期會根據反饋,做出一些調整
依賴
- netty 4,目前JAVA IO界明星
- mqtt-library 二進制和MQTT對象的轉換,這種苦活累活都是它來做,真心讓人喜歡。
數據流轉
解碼器
用于轉換二進制流到JAVA對象的過程:
編碼器
對所有要寫入網卡緩沖區的JAVA對象轉換成二進制:
借助于mqtt-library項目,編解碼不復雜。
MQTT的消息處理
更具體的可以查看項目。
小結
簡單介紹了一個簡單的不能再簡單的MQTT Server,只具有最基本的QoS 0類型的消息訂閱等。
后面,對HTML 5 Websocket,會在現有基礎代碼之上,不做多大改動,增加對MQTT Over WebSocket的支持。
posted on 2014-05-24 23:03 nieyong 閱讀(9278) 評論(2) 編輯 收藏 所屬分類: MQTT