Websocket原理及使用場景[轉(zhuǎn)載]

WebSocket的使用場景

社交聊天、彈幕、多玩家游戲、協(xié)同編輯、股票基金實時報價、體育實況更新、視頻會議/聊天、基于位置的應(yīng)用、在線教育、智能家居等需要高實時的場景

由輪詢到WebSocket

1 輪詢

客戶端和服務(wù)器之間會一直進行連接,每隔一段時間就詢問一次??蛻舳藭喸?,有沒有新消息。這種方式連接數(shù)會很多,一個接受,一個發(fā)送。而且每次發(fā)送請求都會有Http的Header,會很耗流量,也會消耗CPU的利用率。

2?長輪詢

長輪詢是對輪詢的改進版,客戶端發(fā)送HTTP給服務(wù)器之后,有沒有新消息,如果沒有新消息,就一直等待。當有新消息的時候,才會返回給客戶端。在某種程度上減小了網(wǎng)絡(luò)帶寬和CPU利用率等問題。但是這種方式還是有一種弊端:例如假設(shè)服務(wù)器端的數(shù)據(jù)更新速度很快,服務(wù)器在傳送一個數(shù)據(jù)包給客戶端后必須等待客戶端的下一個Get請求到來,才能傳遞第二個更新的數(shù)據(jù)包給客戶端,那么這樣的話,客戶端顯示實時數(shù)據(jù)最快的時間為2×RTT(往返時間),而且如果在網(wǎng)絡(luò)擁塞的情況下,這個時間用戶是不能接受的,比如在股市的的報價上。另外,由于http數(shù)據(jù)包的頭部數(shù)據(jù)量往往很大(通常有400多個字節(jié)),但是真正被服務(wù)器需要的數(shù)據(jù)卻很少(有時只有10個字節(jié)左右),這樣的數(shù)據(jù)包在網(wǎng)絡(luò)上周期性的傳輸,難免對網(wǎng)絡(luò)帶寬是一種浪費。

3 ?WebSocket

現(xiàn)在急需的需求是能支持客戶端和服務(wù)器端的雙向通信,而且協(xié)議的頭部又沒有HTTP的Header那么大,于是,Websocket就誕生了!流量消耗方面,相同的每秒客戶端輪詢的次數(shù),當次數(shù)高達數(shù)萬每秒的高頻率次數(shù)的時候,WebSocket消耗流量僅為輪詢的幾百分之一

WebSocket協(xié)議原理

Websocket是應(yīng)用層第七層上的一個應(yīng)用層協(xié)議,它必須依賴?HTTP 協(xié)議進行一次握手?,握手成功后,數(shù)據(jù)就直接從 TCP 通道傳輸,與 HTTP 無關(guān)了。

Websocket的數(shù)據(jù)傳輸是frame形式傳輸?shù)?,比如會將一條消息分為幾個frame,按照先后順序傳輸出去。這樣做會有幾個好處:

1 大數(shù)據(jù)的傳輸可以分片傳輸,不用考慮到數(shù)據(jù)大小導(dǎo)致的長度標志位不足夠的情況。

2 和http的chunk一樣,可以邊生成數(shù)據(jù)邊傳遞消息,即提高傳輸效率。

WebSocket和Socket的區(qū)別與聯(lián)系

首先,Socket?其實并不是一個協(xié)議。它工作在 OSI 模型會話層(第5層),是為了方便大家直接使用更底層協(xié)議(一般是?TCP?或?UDP?)而存在的一個抽象層。Socket是對TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個調(diào)用接口(API)。

Socket通常也稱作”套接字”,用于描述IP地址和端口,是一個通信鏈的句柄。網(wǎng)絡(luò)上的兩個程序通過一個雙向的通訊連接實現(xiàn)數(shù)據(jù)的交換,這個雙向鏈路的一端稱為一個Socket,一個Socket由一個IP地址和一個端口號唯一確定。應(yīng)用程序通常通過”套接字”向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。

Socket在通訊過程中,服務(wù)端監(jiān)聽某個端口是否有連接請求,客戶端向服務(wù)端發(fā)送連接請求,服務(wù)端收到連接請求向客戶端發(fā)出接收消息,這樣一個連接就建立起來了??蛻舳撕头?wù)端也都可以相互發(fā)送消息與對方進行通訊,直到雙方連接斷開

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容