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

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

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

    聶永的博客

    記錄工作/學習的點點滴滴。

    MQTT協議筆記之mqtt.io項目HTTP協議支持

    前言

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

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

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

    一句話,比它強大的,沒有它輕量。比它還輕的,沒有它可控。

    總之,在資源受限環境下表現如此優異,那么桌面端會表現的更為優秀。

    HTTP支持情況

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

    xhr2

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

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

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

    設計摘要

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

    MQTT 協議關鍵交互點: 1. 連接獲取授權 1. 訂閱/退訂主題 1. 發布消息 1. 等待訂閱消息 1. 關閉連接

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

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

    HTTP通道已經預留出接口,便于支持其它類型的HTTP傳輸通道,比如需要在非瀏覽器環境中實現常規的long polling/Http Streaming,僅僅需要做到實現相應接口即可。

    客戶端ID的生成方式,一般是由服務器端生成的SessionId決定。傳輸純文本方式比較結構化JSON結構比較合適。

    JSONP只支持HTTP GET方式,這一點需要牢記。

    傳輸接口定義

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

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

    簡單示范

    一般傳輸的是文字內容,但具有結構化的,非json莫屬。無論是走TCP方式二進制流還是JSONP傳輸的內容體,json都是不錯的可結構化數據的選擇。

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

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

    小結

    簡單實現jsonp形式的MQTT OVER HTTP,做到文本和二進制彼此之間交換數據。總之在純HTTP環境下使用MQTT協議,是一個不錯的選擇。

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

    評論

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

    有例子嗎?  回復  更多評論   

    公告

    所有文章皆為原創,若轉載請標明出處,謝謝~

    新浪微博,歡迎關注:

    導航

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

    統計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 99亚洲男女激情在线观看| 亚洲国产精品无码AAA片| 在线播放免费播放av片| 毛片免费观看网站| 在线观看免费宅男视频| 永久黄网站色视频免费| 精品剧情v国产在免费线观看| 在线免费观看污网站| 国产成人免费a在线视频app| 国产免费啪嗒啪嗒视频看看| 亚洲成人国产精品| 国产亚洲精aa成人网站| 国产精品亚洲а∨无码播放| 久久亚洲精品成人| 91亚洲自偷在线观看国产馆| 国产成人亚洲精品| 久久久久久亚洲av无码蜜芽| 免费无遮挡无码视频在线观看| 一级片在线免费看| 暖暖免费在线中文日本| 日韩精品内射视频免费观看| 亚洲黄色免费观看| 妞干网免费视频观看| 无码不卡亚洲成?人片| 亚洲精品无码MV在线观看| 亚洲最大的成网4438| 亚洲xxxx18| 又硬又粗又长又爽免费看 | 在线a亚洲v天堂网2019无码| 亚洲AV中文无码字幕色三| 亚洲欧洲精品视频在线观看| 亚洲熟妇自偷自拍另欧美| 男人j进女人p免费视频| 国产成人精品一区二区三区免费| 国产成人免费高清激情明星| 暖暖在线日本免费中文| 国产AV无码专区亚洲AV手机麻豆| 中文字幕亚洲第一在线| 亚洲精品永久在线观看| 中文日本免费高清| 很黄很色很刺激的视频免费|