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

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

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

    聶永的博客

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

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

    前言

    MQTT協議專注于網絡、資源受限環境,建立之初不曾考慮WEB環境,倒也正常。雖然如此,但不代表它不適合HTML5環境。

    HTML5 Websocket是建立在TCP基礎上的雙通道通信,和TCP通信方式很類似,適用于WEB瀏覽器環境。雖然MQTT基因層面選擇了TCP作為通信通道,但我們添加個編解碼方式,MQTT Over Websocket也可以的。

    這樣做的好處,MQTT的使用范疇被擴展到HTML5、桌面端瀏覽器、移動端WebApp、Hybrid等,多了一些想像空間。這樣看來,無論是移動端,還是WEB端,MQTT都會有自己的使用空間。

    瀏覽器支持

    話說,現代化瀏覽器都已經支持Websocket,這里有一個所有瀏覽器支持列表:

    b84feb4f-ff91-45fc-9798-ce6f44e76af9

    更詳細列表,請直接訪問:http://caniuse.com/websockets

    毫無疑問,火狐和谷歌瀏覽器帶動了現代瀏覽器的發展,對HTML5標準的支持也是如此。支持Websocket的瀏覽器單純從上面數字來講,73.88%的支持率。但實際上還得參考瀏覽器市場占有率:

    1[1]

    上圖數據,來源于: 2014年4月份全球主流瀏覽器市場份額排行榜

    超過60%用戶機器上瀏覽器的支持Websocket,數據很可觀。

    移動hybrid型應用會很歡迎Websocket

    • 內置瀏覽器支持HTML5,Javascript操作Websocket連接MQTT
    • 借助于原生TCP socket通道連接MQTT服務器,暴露JavaScript接口,間接使用

    不支持Websocket的桌面瀏覽器,可以考慮Flash socket來幫忙!

    針對不支持websocker的部分歷史瀏覽器,可以考慮一下Flash socket,雖然使用Flashsocket用以模擬Websocket就很容易理解,但條件如下: - 需要單獨占用一個端口專用于安全跨域訪問策略 - 需要瀏覽器支持二進制Blob 支持二進制操作的瀏覽器現狀:

    xhr2

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

    比較一下支持Websocket和XHR2的桌面瀏覽器,重疊率很高,使用Flash Socket用以模擬Websocket必要性不大,在類似于IE平臺上,不如直接使用Flash版本的

    https://github.com/yangboz/as3MQTT/tree/master/MQTTClient_AS3

    不支持Websocket瀏覽器怎么辦

    不是所有瀏覽器都支持Websocket,尤其是阻礙歷史發展的IE6/IE7/IE8/IE9。MQTT協議為二進制協議壓根和HTTP純文本不兼容,尤其瀏覽器端JavaScript處理文本很合適,但二進制就顯得笨手笨角,除非支持XHR2。

    1. 單獨使用Flash MQTT Client,這這方面見解不深,實踐很少,不便多說,您要是很了解,不妨告知一二。
    2. HTTP純文本方式進行二進制對接

    這部分后面專門會講到。

    服務器端支持

    現有一些解決方案可能是后面為MQTT Broker,前面是添加一層代理。比如:例如 mod_websocket ,對應在線示范:http://test.mosquitto.org/ws.html

    表面上看著很解藕的,實際上模仿的還是傳統型的短連接反向代理架構:Nginx/Apache +Java/PHP/Python/Ruby。

    客戶端建立一條連接,服務器端需要使用到至少兩個文件句柄,中間多了一層路徑。優雅的解決方案,可以向socket.io看起。一套服務端程序,同時提供若干種協議供終端選擇。其實,一臺MQTT Broker中間件服務器,可以綁定多個端口,一個面向純TCP的1883端口,一個面向Websocket的80/8080端口,共享基礎邏輯,面向不同協議。

    Websocket協議適配

    服務器添加對Websocket支持,基本不用做多大改動。對比Tcp的附加到單個Channel的處理器列表:

    Websocket對應單個Channel的處理器列表:

    為了支持Websocket協議,僅僅額外增加了:

    小結

    啰啰嗦嗦的講了一大通Websocket,總之對Websocket的支持還算容易。后面有時間寫寫如何使用HTTP協議達到MQTT OVER HTTP的效果。

    posted on 2014-05-26 19:14 nieyong 閱讀(11231) 評論(4)  編輯  收藏 所屬分類: MQTT

    評論

    # re: MQTT協議筆記之mqtt.io項目Websocket協議支持 2014-06-12 20:52 泡菜

    這些內容對于我來說真的是很深,一點頭緒都找不到啊!  回復  更多評論   

    # re: MQTT協議筆記之mqtt.io項目Websocket協議支持 2015-02-04 19:26 allankliu

    您好,我專注于硬件和物聯網。最近發現客戶此類要求越發急迫。

    許多嵌入式設備往往使用基礎的UDP/TCP通訊,客戶不愿意大規模改動,往往使用socketserver,比如Python socketserver/twisted以及相關小規??蚣堋5沁@些框架往往缺乏商業化所必須的RBAC(權限管理)以及其他的必備組件。

    所以,我選用了web2py/Django作為WebAPP框架以實施WebServer。但是這樣,我的框架就變成了socket server,web server的兩個服務器。出于數據庫管理和安全考慮,從web server處引出API給socket server。

    感覺不優雅,可能性能也會有問題。你可能發現我喜歡使用Python,因為我可以使用同一語言在嵌入式,服務器和客戶端。

    在調研過CoAP/MQTT等協議后,也發現了Python相關軟件包。但是看到您提到node.js/socket.io可以實施多種協議,是一個服務器實施多個端口監聽么?

    性能如何?此外,node.js/socket.io是否具備我們常見的服務器框架的必備功能,如路徑管理,RBAC。雖然使用jQuery時使用JS,但是我自認為還不是很合格的JS開發者。不知道使用node.js開發服務器和Python/PHP開發服務器難度上差別如何?  回復  更多評論   

    # re: MQTT協議筆記之mqtt.io項目Websocket協議支持 2015-02-05 14:51 nieyong

    @allankliu
    第一個問題:一個服務器可以綁定多個端口,每一個端口各司其職即可,但需要應用程序支持才行。但可能會造成功能耦合在了一起。
    第二個問題:node.js我不熟,不好回答。

      回復  更多評論   

    # re: MQTT協議筆記之mqtt.io項目Websocket協議支持 2015-03-03 18:39 joeytian

    @allankliu
    很開心看到你做的和我有很大的相似性。我目前還在嘗試用twisted來構建網關服務,主要是看中其異步和多協議支持。希望有機會交流(whatkao#gmail.com)  回復  更多評論   

    公告

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

    新浪微博,歡迎關注:

    導航

    <2014年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产精品无码久久| 亚洲av永久无码制服河南实里| 毛片免费视频观看| 啦啦啦完整版免费视频在线观看| 一级毛片免费视频| 久久国产精品2020免费m3u8| 午夜精品一区二区三区免费视频| 久久免费精品一区二区| 免费一级毛片无毒不卡| 亚洲精品免费在线观看| 一区二区三区观看免费中文视频在线播放 | 久久久精品午夜免费不卡| a一级毛片免费高清在线| 9i9精品国产免费久久| 精品久久久久久国产免费了| 三年片在线观看免费西瓜视频| 国产日韩AV免费无码一区二区 | 亚洲综合偷自成人网第页色| 亚洲色精品三区二区一区| 国产精品国产亚洲区艳妇糸列短篇| 风间由美在线亚洲一区| 一级看片免费视频囗交| 免费91麻豆精品国产自产在线观看 | 亚洲AV无码一区二区三区电影| 成人亚洲国产精品久久| 国产精品免费视频观看拍拍| 九九精品成人免费国产片| 最近新韩国日本免费观看| 拍拍拍又黄又爽无挡视频免费| 国产免费卡一卡三卡乱码| 国产91精品一区二区麻豆亚洲| 亚洲国产无套无码av电影| 亚洲黄色免费电影| 亚洲精品无码永久在线观看男男| 国产亚洲高清在线精品不卡| 特级做A爰片毛片免费看无码 | 一级毛片免费在线观看网站| 国产一级淫片a免费播放口| 国产va精品免费观看| 国产乱子伦片免费观看中字| 亚洲色婷婷综合久久|