WebSocket的使用場景服務器
社交聊天、彈幕、多玩家遊戲、協同編輯、股票基金實時報價、體育實況更新、視頻會議/聊天、基於位置的應用、在線教育、智能家居等須要高實時的場景網絡
由輪詢到WebSocketsocket
1 輪詢大數據
客戶端和服務器之間會一直進行鏈接,每隔一段時間就詢問一次。客戶端會輪詢,有沒有新消息。這種方式鏈接數會不少,一個接受,一個發送。並且每次發送請求都會有Http的Header,會很耗流量,也會消耗CPU的利用率。spa
2 長輪詢orm
長輪詢是對輪詢的改進版,客戶端發送HTTP給服務器以後,有沒有新消息,若是沒有新消息,就一直等待。當有新消息的時候,纔會返回給客戶端。在某種程度上減少了網絡帶寬和CPU利用率等問題。可是這種方式仍是有一種弊端:例如假設服務器端的數據更新速度很快,服務器在傳送一個數據包給客戶端後必須等待客戶端的下一個Get請求到來,才能傳遞第二個更新的數據包給客戶端,那麼這樣的話,客戶端顯示實時數據最快的時間爲2×RTT(往返時間),並且若是在網絡擁塞的狀況下,這個時間用戶是不能接受的,好比在股市的的報價上。另外,因爲http數據包的頭部數據量每每很大(一般有400多個字節),可是真正被服務器須要的數據卻不多(有時只有10個字節左右),這樣的數據包在網絡上週期性的傳輸,不免對網絡帶寬是一種浪費。視頻
3 WebSocket接口
如今急需的需求是能支持客戶端和服務器端的雙向通訊,並且協議的頭部又沒有HTTP的Header那麼大,因而,Websocket就誕生了!流量消耗方面,相同的每秒客戶端輪詢的次數,當次數高達數萬每秒的高頻率次數的時候,WebSocket消耗流量僅爲輪詢的幾百分之一
遊戲
WebSocket協議原理iframe
Websocket是應用層第七層上的一個應用層協議,它必須依賴 HTTP 協議進行一次握手 ,握手成功後,數據就直接從 TCP 通道傳輸,與 HTTP 無關了。
Websocket的數據傳輸是frame形式傳輸的,好比會將一條消息分爲幾個frame,按照前後順序傳輸出去。這樣作會有幾個好處:
1 大數據的傳輸能夠分片傳輸,不用考慮到數據大小致使的長度標誌位不足夠的狀況。
2 和http的chunk同樣,能夠邊生成數據邊傳遞消息,即提升傳輸效率。
WebSocket和Socket的區別與聯繫
首先,Socket 其實並非一個協議。它工做在 OSI 模型會話層(第5層),是爲了方便你們直接使用更底層協議(通常是 TCP 或 UDP )而存在的一個抽象層。Socket是對TCP/IP協議的封裝,Socket自己並非協議,而是一個調用接口(API)。
Socket一般也稱做」套接字」,用於描述IP地址和端口,是一個通訊鏈的句柄。網絡上的兩個程序經過一個雙向的通信鏈接實現數據的交換,這個雙向鏈路的一端稱爲一個Socket,一個Socket由一個IP地址和一個端口號惟一肯定。應用程序一般經過」套接字」向網絡發出請求或者應答網絡請求。
Socket在通信過程當中,服務端監聽某個端口是否有鏈接請求,客戶端向服務端發送鏈接請求,服務端收到鏈接請求向客戶端發出接收消息,這樣一個鏈接就創建起來了。客戶端和服務端也均可以相互發送消息與對方進行通信,直到雙方鏈接斷開