WebSocket?許多網站使用輪詢來實現推送技術。輪詢是在特定的時間間隔(比如1秒),瀏覽器向服務器發送HTTP請求,然後服務器向瀏覽器返回最新的數據。投票的缺點是顯而易見的。瀏覽器需要不斷向服務器發送請求。但是HTTP請求的頭很長,實際傳輸的數據可能很小,造成了帶寬和服務器資源的浪費。
Comet使用AJAX改進輪詢,可以實現雙向通信。但是Comet還是需要發送請求,而且在Comet中,長鏈接被廣泛使用,也會消耗大量的服務器帶寬和資源。
因此,WebSocket協議應運而生。瀏覽器通過JavaScript向服務器發送建立WebSocket連接的請求。連接建立後,客戶端和服務器直接通過TCP連接交換數據。WebSocket連接本質上是壹個TCP連接。
WebSocket在數據傳輸的穩定性和數據傳輸的大小上有很大的性能優勢。Websocket.org比較了輪詢和WebSocket的性能優勢:
HTTP輪換訓練每次需要返回871字節,websocket每次只需要2字節。
用例A:1000個客戶端每秒接受壹條消息,網絡吞吐量(2 * 1000)= 2000字節= 16000比特每秒。
用例B:10000個客戶端每秒接受壹條消息,網絡吞吐量(2 * 10000)= 20000字節= 160000比特每秒。
用例C:100000個客戶端每秒接收壹條消息,網絡吞吐量(2 * 100000)= 200000字節= 1,600000比特每秒。
MQTT協議是為大量遠程傳感器和控制設備之間的通信而設計的,這些設備具有有限的計算能力,並且工作在低帶寬和不可靠的網絡中。它有以下主要特點:
通信開銷非常小(最小消息大小為2字節),傳輸量小,開銷非常小(定長頭為2字節),協議交換最小化,減少網絡流量。
易於使用的客戶端,支持各種流行的編程語言(包括C、Java、Ruby、Python等。);
使用發布/訂閱消息模式來提供壹對多消息發布和分離應用程序。
屏蔽有效載荷內容的消息傳輸。
使用TCP/IP提供網絡連接。
消息發布有三種服務質量,使消息按需到達目的地,滿足不穩定網絡的傳輸要求:
“最多壹次”,消息發布完全依賴於底層的TCP/IP網絡。可能會出現消息丟失或重復。該級別可用於以下情況。環境傳感器數據丟失壹次也沒關系,因為很快就會有第二次傳輸。
“至少壹次”以確保消息到達,但可能會出現消息重復。
“只有壹次”,確保消息到達壹次。當重復或丟失的消息將導致計費系統中的錯誤結果時,可以使用該級別。