<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以及相關小規??蚣?。但是這些框架往往缺乏商業化所必須的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)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲色欲色欲www在线播放 | 麻豆亚洲AV永久无码精品久久| 日韩不卡免费视频| 全黄大全大色全免费大片| 国产精品久久久久免费a∨| 中文字幕免费不卡二区| 一级做a爰片久久毛片免费陪| www.亚洲成在线| 亚洲成人黄色网址| 亚洲国产精品国自产拍电影| 亚洲人成无码网站| 亚洲人成伊人成综合网久久久| 精品国产日韩亚洲一区| 亚洲av日韩片在线观看| 亚洲精品视频久久久| 美腿丝袜亚洲综合| 亚洲日本一区二区三区在线| 亚洲高清国产AV拍精品青青草原| 亚洲熟妇无码乱子AV电影| 亚洲中文字幕不卡无码| 久久久影院亚洲精品| 亚洲国产亚洲综合在线尤物| 亚洲综合激情五月色一区| 全部在线播放免费毛片| 精品国产污污免费网站| 成人免费一级毛片在线播放视频| 在线看片免费不卡人成视频| 国产乱子伦片免费观看中字| 亚洲午夜久久久久妓女影院| 亚洲精品午夜久久久伊人| 亚洲日本VA午夜在线影院| 一区二区三区免费视频播放器| 亚洲成人免费在线| 免费jjzz在线播放国产| 亚洲六月丁香六月婷婷蜜芽 | 国产成人亚洲影院在线观看| 日产亚洲一区二区三区| 妇女自拍偷自拍亚洲精品| 久久国产免费观看精品3| 亚洲最大av无码网址| 亚洲一区无码中文字幕乱码|