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