<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    聶永的博客

    記錄工作/學(xué)習(xí)的點(diǎn)點(diǎn)滴滴。

    MQTT協(xié)議筆記之mqtt.io項(xiàng)目HTTP協(xié)議支持

    前言

    MQTT協(xié)議誕生之初,就未曾考慮通過HTTP傳輸。這也正常,網(wǎng)絡(luò)受限、不穩(wěn)定網(wǎng)絡(luò)不太適合HTTP(2G/3G網(wǎng)絡(luò)大家使用WAP不也OK嘛)。在網(wǎng)絡(luò)較為充裕的桌面端而言,雖純文本對比二進(jìn)制而言沒多大優(yōu)勢,受制于歷史遺留和使用習(xí)慣,以及一大票傳統(tǒng)基礎(chǔ)設(shè)施方便控制事宜,傳統(tǒng)互聯(lián)網(wǎng)/企業(yè)型應(yīng)用,HTTP協(xié)議都是默認(rèn)最佳選擇,安全可控,人機(jī)友好。選擇HTTP也在情理之中。

    雖桌面端日漸式微,但做統(tǒng)一的全平臺化消息系統(tǒng)/消息中間件,也是趨勢。

    MQTT OVER HTTP,為WEB環(huán)境提供HTTP通道協(xié)議支持,在統(tǒng)一平臺化這樣的考量下,就顯得合情合理。 MQTT相比其它基于HTTP的交換協(xié)議而言(比如socket.io),流量節(jié)省,消息質(zhì)量可控。

    一句話,比它強(qiáng)大的,沒有它輕量。比它還輕的,沒有它可控。

    總之,在資源受限環(huán)境下表現(xiàn)如此優(yōu)異,那么桌面端會表現(xiàn)的更為優(yōu)秀。

    HTTP支持情況

    二進(jìn)制支持,針對瀏覽器端JavaScript而言,處理起來,如同在石器時代要處理工業(yè)時代一些通訊方式,非常吃力。支持Javascript二進(jìn)制操作的瀏覽器現(xiàn)狀:

    xhr2

    來源于:http://caniuse.com/xhr2

    這和支持Websocket的瀏覽器的基本重疊。

    要想讓HTTP傳輸MQTT具體消息二進(jìn)制,然后由瀏覽器javascript腳本進(jìn)行解析,無法做到支持所有常見瀏覽器,需要考慮純文本方式的傳輸。

    設(shè)計(jì)摘要

    AJAX方式,支持跨域,支持所有主流平臺,桌面+移動設(shè)備;所有瀏覽器,移動的,桌面的,包括IE6+。那么最理想方式就是JSONP,基于文本通信的Long-polling JSONP方式。

    MQTT 協(xié)議關(guān)鍵交互點(diǎn): 1. 連接獲取授權(quán) 1. 訂閱/退訂主題 1. 發(fā)布消息 1. 等待訂閱消息 1. 關(guān)閉連接

    若支持HTTP方式完成以上功能/步驟,服務(wù)器端需要支持接收HTTP純文本內(nèi)容請求,拼裝、轉(zhuǎn)換成Java對象,業(yè)務(wù)層面實(shí)現(xiàn)數(shù)據(jù)流轉(zhuǎn)、交換,直接插入到更具體業(yè)務(wù)中,這樣就很容易。雖類似于橋接,但減少了橋接的路徑(HTTP —》MQTT),減少資源占用,性能上有所保證。

    HTTP 文本方式,和MQTT二進(jìn)制之間需要某些規(guī)則的轉(zhuǎn)換,為了兼容,需要單獨(dú)定義接口傳輸接口,ChannelEntry,雙通道和單通道處理數(shù)據(jù)的方式不同,單通道的HTTP JSONP需要支持短暫緩存消息并等待客戶端的依次獲取。發(fā)布/接收訂閱消息時,TCP/Websocket利用雙通道對應(yīng)Channel可直接發(fā)送。

    HTTP通道已經(jīng)預(yù)留出接口,便于支持其它類型的HTTP傳輸通道,比如需要在非瀏覽器環(huán)境中實(shí)現(xiàn)常規(guī)的long polling/Http Streaming,僅僅需要做到實(shí)現(xiàn)相應(yīng)接口即可。

    客戶端ID的生成方式,一般是由服務(wù)器端生成的SessionId決定。傳輸純文本方式比較結(jié)構(gòu)化JSON結(jié)構(gòu)比較合適。

    JSONP只支持HTTP GET方式,這一點(diǎn)需要牢記。

    傳輸接口定義

    1. 連接獲取授權(quán) /jsonp/connect
    2. 訂閱主題 /jsonp/subscribe
    3. 等待訂閱消息 /jsonp/waiting
    4. 發(fā)布主題 /jsonp/publish
    5. 退訂主題 /jsonp/unsubscrible
    6. 關(guān)閉連接 /jsonp/disconnect

    要求返回的消息類型都是JSON字符串形式,訂閱/發(fā)布的消息,一定要包含{id:10, msg:'具體消息內(nèi)容'}類似json字符串。

    簡單示范

    一般傳輸?shù)氖俏淖謨?nèi)容,但具有結(jié)構(gòu)化的,非json莫屬。無論是走TCP方式二進(jìn)制流還是JSONP傳輸?shù)膬?nèi)容體,json都是不錯的可結(jié)構(gòu)化數(shù)據(jù)的選擇。

    瀏覽器端jquery,支持jsonp請求,這里有一個簡單示范:

    填寫好地址,自動執(zhí)行連接,訂閱,接收消息,一個最簡單的Demo表現(xiàn)了其流程。

    小結(jié)

    簡單實(shí)現(xiàn)jsonp形式的MQTT OVER HTTP,做到文本和二進(jìn)制彼此之間交換數(shù)據(jù)??傊诩僅TTP環(huán)境下使用MQTT協(xié)議,是一個不錯的選擇。

    posted on 2014-06-06 16:42 nieyong 閱讀(5016) 評論(1)  編輯  收藏 所屬分類: MQTT

    評論

    # re: MQTT協(xié)議筆記之mqtt.io項(xiàng)目HTTP協(xié)議支持[未登錄] 2015-01-22 15:01 lk

    有例子嗎?  回復(fù)  更多評論   

    公告

    所有文章皆為原創(chuàng),若轉(zhuǎn)載請標(biāo)明出處,謝謝~

    新浪微博,歡迎關(guān)注:

    導(dǎo)航

    <2014年6月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    統(tǒng)計(jì)

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产免费一区二区三区不卡| 国产精品冒白浆免费视频| 亚洲大尺码专区影院| 国产高清免费在线| 三上悠亚在线观看免费| 亚洲国产片在线观看| 内射无码专区久久亚洲| 三年片在线观看免费大全电影 | 18禁在线无遮挡免费观看网站| 亚洲国产日韩在线一区| 亚洲AⅤ优女AV综合久久久| 久久一本岛在免费线观看2020| 亚洲精品色播一区二区| 亚洲AV无码乱码国产麻豆穿越| 日本高清免费中文字幕不卡| 免费观看91视频| 美女被羞羞网站免费下载| 亚洲视频一区网站| 亚洲国产精品视频| 免费看大美女大黄大色| 久9久9精品免费观看| 特级毛片在线大全免费播放| 亚洲jizzjizz在线播放久| 国产亚洲3p无码一区二区| 国产免费牲交视频| 一色屋成人免费精品网站| 99久久国产精品免费一区二区| 美女18一级毛片免费看| 久久狠狠爱亚洲综合影院| 久久久久亚洲精品无码系列| 亚洲成av人片一区二区三区| 久久不见久久见免费影院| 久久精品毛片免费观看| 99麻豆久久久国产精品免费 | 免费视频精品一区二区| 亚洲熟妇丰满xxxxx| 亚洲制服丝袜在线播放| 99久久亚洲综合精品成人网| 亚洲中文久久精品无码| 亚洲高清免费视频| 四虎影库久免费视频|