MQTT和WebSocket

嚴格來講,MQTT跟WebSocket關係不大。他們不是在一個層級的。html

 

MQTT和TCP、WebSocket的關係能夠用下圖一目瞭然:web

fd8bfc1a045c026261782533cc48529e

 

參考資料:spring

http://www.zhihu.com/question/21816631編程

 

WebSocket的優點

之前,不少網站使用輪詢實現推送技術。輪詢是在特定的的時間間隔(好比1秒),由瀏覽器對服務器發出HTTP request,而後由服務器返回最新的數據給瀏覽器。輪詢的缺點很明顯,瀏覽器須要不斷的向服務器發出請求,然而HTTP請求的header是很是長的,而實際傳輸的數據可能很小,這就形成了帶寬和服務器資源的浪費。 segmentfault

Comet使用了AJAX改進了輪詢,能夠實現雙向通訊。可是Comet依然須要發出請求,並且在Comet中,廣泛採用了長連接,這也會大量消耗服務器帶寬和資源。 瀏覽器

因而,WebSocket協議應運而生。 瀏覽器經過 JavaScript 向服務器發出創建 WebSocket 鏈接的請求,鏈接創建之後,客戶端和服務器經過 TCP 鏈接直接交換數據。WebSocket 鏈接本質上是一個 TCP 鏈接。 服務器

WebSocket在數據傳輸的穩定性和數據傳輸量的大小方面,具備很大的性能優點。Websocket.org 比較了輪詢和WebSocket的性能優點:websocket

HTTP 輪訓每次須要返回871個字節,websocket每次只須要2個字節網絡

Use Case A: 1,000個客戶端每秒接受一個message,網絡吞吐量 (2*1,000)=2,000 bytes = 16,000 每秒bits 架構

Use Case B: 10,000個客戶端每秒接受一個message,網絡吞吐量 (2*10,000)=20,000 bytes = 160,000 每秒bits

Use Case C: 100,000個客戶端每秒接受一個message,網絡吞吐量 (2*100,000)=200,000 bytes = 1,600,000 每秒bits

poll-ws-compare

參考:

http://segmentfault.com/a/1190000000382788

Spring 4.0 中的 WebSocket 架構
http://www.oschina.net/translate/websocket-architecture-in-spring-4-0

MQTT

 

MQTT 協議是爲大量計算能力有限,且工做在低帶寬、不可靠的網絡的遠程傳感器和控制設備通信而設計的協議,它具備如下主要的幾項特性:

  • 很是小的通訊開銷(最小的消息大小爲 2 字節),小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以下降網絡流量。
  • 支持各類流行編程語言(包括 C,Java,Ruby,Python 等等)且易於使用的客戶端;
  • 使用發佈 / 訂閱消息模式,提供一對多的消息發佈,解除應用程序耦合。
  • 對負載內容屏蔽的消息傳輸。
  • 使用 TCP/IP 提供網絡鏈接。
  • 有三種消息發佈服務質量,讓消息能按需到達目的地,適應在不穩定工做的網絡傳輸需求 :
    • "至多一次",消息發佈徹底依賴底層 TCP/IP 網絡。會發生消息丟失或重複。這一級別可用於以下狀況,環境傳感器數據,丟失一次讀記錄無所謂,由於不久後還會有第二次發送。
    • "至少一次",確保消息到達,但消息重複可能會發生。
    • "只有一次",確保消息到達一次。這一級別可用於以下狀況,在計費系統中,消息重複或丟失會致使不正確的結果。
  • 使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制。

 

參考:

MQTT技術:爲物聯網而生
http://www.leiphone.com/0828-danice-mqtt.html

 

MQTT 折騰筆記----協議簡讀
http://www.cnblogs.com/youxilua/archive/2013/04/25/3041528.html

 

 

基於 WebSocket 的 MQTT 移動推送方案
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1308_xiangr_mqtt/1308_xiangr_mqtt.html

相關文章
相關標籤/搜索