背景web
傳統的網絡很大程度上是基於http的請求/響應模式而構建的。客戶端加載一個頁面後,須要用戶作交互操做,發送請求給服務器,服務器纔會作出反應,這樣服務器有更新信息時就沒法主動的將數據發送給客戶端。所以須要用戶互動或按期輪詢,以便服務器將數據更新給客戶端。瀏覽器
已有解決辦法-輪詢服務器
1.在特定的時間間隔由瀏覽器發出HTTP request, 使服務器端將最新的數據返回給瀏覽器。它的缺點是瀏覽器須要不停地給服務器發出請求,可是HTTP request的header很是長,裏面包含的有效數據卻頗有可能很是短,形成了帶寬和服務器資源的浪費。websocket
2.較新的輪訓Comet中,廣泛使用了持久鏈接,這也會大量消耗服務器帶寬和資源。網絡
HTTP 持久鏈接(HTTP persistent connection, HTTP keep-alive, HTTP connection reuse)是使用同一個tcp鏈接來發送和接收多個HTTP請求/響應,而不是爲每個新的請求/響應打開新的鏈接的方法。可是依然須要HTTP的開銷,者一樣會大量消耗服務器帶寬和資源。socket
WebSockettcp
HTML5定義了WebSocket協議,能更好的節省服務器資源和帶寬並達到實時通信。spa
"握手協議":在實現websocket的連線過程當中,須要經過瀏覽器發出websocket連線請求,而後服務器發出迴應,這個過程稱爲"握手"。以後,客戶端和服務器之間存在持久地鏈接,並且雙方能夠隨時開始發送數據。資源
優勢:header小,服務器與客戶端之間交換的數據包檔頭很小,不佔用帶寬。io
服務器推送,服務器能夠主動推送數據給客戶端,達到實時更新的目的。