1. 程式人生 > >webSocket 簡單介紹

webSocket 簡單介紹

推送消息 建立 live lose 狀態 目前 獲取數據 多個 響應

WebSocket :WebSocket協議支持(在受控環境中運行不受信任的代碼的)客戶端與(選擇加入該代碼的通信的)遠程主機之間進行全雙工通信
簡單的說,WebSocket協議之前,雙工通信是通過多個http鏈接來實現,這導致了效率低下。

Websocket是一個持久化的協議,相對於HTTP這種非持久的協議來說。

HTTP的生命周期通過Request來界定,也就是一個Request 一個Response,那麽在HTTP1.0中,這次HTTP請求就結束了。
在HTTP1.1中進行了改進,使得有一個keep-alive,也就是說,在一個HTTP連接中,可以發送多個Request,接收多個Response。
但是請記住 Request = Response , 在HTTP中永遠是這樣,也就是說一個request只能有一個response。而且這個response也是被動的,不能主動發起。

WebSocket 解決了 HTTP 的幾個難題
3.1)難題1(http協議的被動性):采用 WebSocket 協議後,服務器可以主動推送消息給客戶端;而不需要客戶端以(長/短)輪詢的方式發起http請求到server以獲取數據更新反饋;這樣一來,客戶端只需要經過一次HTTP請求,就可以做到源源不斷的信息傳送了(在程序設計中,這種設計叫做回調,即:server 端有信息了再來通知client 端,而不是 client 端 每次都傻乎乎地跑去輪詢server端 是否有消息更新);
3.2)難題2(http協議的無狀態性/健忘性):短輪詢是每次http請求前都要建立連接,而長輪詢是相鄰幾次請求前都要建立連接;http請求響應完成後,服務器就會斷開連接,且把連接的信息全都忘記了;所以每次建立連接都要重新傳輸連接上下文(下面有補充),將 client 端的連接上下文來告訴server 端;而 WebSockct只需要一次HTTP 握手,整個通訊過程是建立在一次連接(狀態)中的,server 端會一直推送消息更新反饋到客戶端,直到客戶端關閉請求,這樣就無需 客戶端為發送消息而建立不必要的 tcp 連接 和 為了建立tcp連接而發送不必要的冗余的連接上下文消息;

【補充】http 長連接(tcp 連接可復用)
1)介紹:http協議 目前有兩個版本:1.1 和 1.0;區別是 1.1支持 長連接(普遍使用http1.1版本),長連接也叫做持久連接(keep-alive);而1.0不支持長連接,在1.0版本下,每個http請求響應後都會關閉tcp連接,下一次http請求會重新建立http連接;
2)http 長連接:多個http 請求共用同一個 tcp 連接,這樣可以減少相鄰多次 http請求導致的 tcp連接建立和關閉的資源消耗;http1.1 在請求頭和響應頭中用 connection 字段標識 該http連接是否是 長連接,即connection: keep-alive 表示長連接;而 connection: closed 表明服務器關閉tcp 連接;
3)keep-alive:與 connection 相對應的是 keep-alive,其屬性有 timeout=30 和 max=5 分別是 兩次 http 請求 保持的時間,max表示這個tcp 連接最多被幾個 http 請求重用;

webSocket 簡單介紹