WebSocket原理及使用场景(转载)
由輪詢到WebSocket
1 輪詢
客戶端和服務(wù)器之間會(huì)一直進(jìn)行連接,每隔一段時(shí)間就詢問一次。客戶端會(huì)輪詢,有沒有新消息。這種方式連接數(shù)會(huì)很多,一個(gè)接受,一個(gè)發(fā)送。而且每次發(fā)送請(qǐng)求都會(huì)有Http的Header,會(huì)很耗流量,也會(huì)消耗CPU的利用率。
2?長輪詢
長輪詢是對(duì)輪詢的改進(jìn)版,客戶端發(fā)送HTTP給服務(wù)器之后,有沒有新消息,如果沒有新消息,就一直等待。當(dāng)有新消息的時(shí)候,才會(huì)返回給客戶端。在某種程度上減小了網(wǎng)絡(luò)帶寬和CPU利用率等問題。但是這種方式還是有一種弊端:例如假設(shè)服務(wù)器端的數(shù)據(jù)更新速度很快,服務(wù)器在傳送一個(gè)數(shù)據(jù)包給客戶端后必須等待客戶端的下一個(gè)Get請(qǐng)求到來,才能傳遞第二個(gè)更新的數(shù)據(jù)包給客戶端,那么這樣的話,客戶端顯示實(shí)時(shí)數(shù)據(jù)最快的時(shí)間為2×RTT(往返時(shí)間),而且如果在網(wǎng)絡(luò)擁塞的情況下,這個(gè)時(shí)間用戶是不能接受的,比如在股市的的報(bào)價(jià)上。另外,由于http數(shù)據(jù)包的頭部數(shù)據(jù)量往往很大(通常有400多個(gè)字節(jié)),但是真正被服務(wù)器需要的數(shù)據(jù)卻很少(有時(shí)只有10個(gè)字節(jié)左右),這樣的數(shù)據(jù)包在網(wǎng)絡(luò)上周期性的傳輸,難免對(duì)網(wǎng)絡(luò)帶寬是一種浪費(fèi)。
3 ?WebSocket
現(xiàn)在急需的需求是能支持客戶端和服務(wù)器端的雙向通信,而且協(xié)議的頭部又沒有HTTP的Header那么大,于是,Websocket就誕生了!流量消耗方面,相同的每秒客戶端輪詢的次數(shù),當(dāng)次數(shù)高達(dá)數(shù)萬每秒的高頻率次數(shù)的時(shí)候,WebSocket消耗流量僅為輪詢的幾百分之一
WebSocket協(xié)議原理
Websocket是應(yīng)用層第七層上的一個(gè)應(yīng)用層協(xié)議,它必須依賴?HTTP 協(xié)議進(jìn)行一次握手?,握手成功后,數(shù)據(jù)就直接從 TCP 通道傳輸,與 HTTP 無關(guān)了。
Websocket的數(shù)據(jù)傳輸是frame形式傳輸?shù)?#xff0c;比如會(huì)將一條消息分為幾個(gè)frame,按照先后順序傳輸出去。這樣做會(huì)有幾個(gè)好處:
1 大數(shù)據(jù)的傳輸可以分片傳輸,不用考慮到數(shù)據(jù)大小導(dǎo)致的長度標(biāo)志位不足夠的情況。
2 和http的chunk一樣,可以邊生成數(shù)據(jù)邊傳遞消息,即提高傳輸效率。
WebSocket和Socket的區(qū)別與聯(lián)系
首先,Socket?其實(shí)并不是一個(gè)協(xié)議。它工作在 OSI 模型會(huì)話層(第5層),是為了方便大家直接使用更底層協(xié)議(一般是?TCP?或?UDP?)而存在的一個(gè)抽象層。Socket是對(duì)TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API)。
Socket通常也稱作”套接字”,用于描述IP地址和端口,是一個(gè)通信鏈的句柄。網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通訊連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)雙向鏈路的一端稱為一個(gè)Socket,一個(gè)Socket由一個(gè)IP地址和一個(gè)端口號(hào)唯一確定。應(yīng)用程序通常通過”套接字”向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。
Socket在通訊過程中,服務(wù)端監(jiān)聽某個(gè)端口是否有連接請(qǐng)求,客戶端向服務(wù)端發(fā)送連接請(qǐng)求,服務(wù)端收到連接請(qǐng)求向客戶端發(fā)出接收消息,這樣一個(gè)連接就建立起來了。客戶端和服務(wù)端也都可以相互發(fā)送消息與對(duì)方進(jìn)行通訊,直到雙方連接斷開
WebSocket的使用場景
1.社交聊天
最著名的就是微信,QQ,這一類社交聊天的app。這一類聊天app的特點(diǎn)是低延遲,高即時(shí)。即時(shí)是這里面要求最高的,如果有一個(gè)緊急的事情,通過IM軟件通知你,假設(shè)網(wǎng)絡(luò)環(huán)境良好的情況下,這條message還無法立即送達(dá)到你的客戶端上,緊急的事情都結(jié)束了,你才收到消息,那么這個(gè)軟件肯定是失敗的。
WebSocket原理及使用場景2.彈幕
說到這里,大家一定里面想到了A站和B站了。確實(shí),他們的彈幕一直是一種特色。而且彈幕對(duì)于一個(gè)視頻來說,很可能彈幕才是精華。發(fā)彈幕需要實(shí)時(shí)顯示,也需要和聊天一樣,需要即時(shí)。
3.多玩家游戲
4.協(xié)同編輯
現(xiàn)在很多開源項(xiàng)目都是分散在世界各地的開發(fā)者一起協(xié)同開發(fā),此時(shí)就會(huì)用到版本控制系統(tǒng),比如Git,SVN去合并沖突。但是如果有一份文檔,支持多人實(shí)時(shí)在線協(xié)同編輯,那么此時(shí)就會(huì)用到比如WebSocket了,它可以保證各個(gè)編輯者都在編輯同一個(gè)文檔,此時(shí)不需要用到Git,SVN這些版本控制,因?yàn)樵趨f(xié)同編輯界面就會(huì)實(shí)時(shí)看到對(duì)方編輯了什么,誰在修改哪些段落和文字。
5.股票基金實(shí)時(shí)報(bào)價(jià)
金融界瞬息萬變——幾乎是每毫秒都在變化。如果采用的網(wǎng)絡(luò)架構(gòu)無法滿足實(shí)時(shí)性,那么就會(huì)給客戶帶來巨大的損失。幾毫秒錢股票開始大跌,幾秒以后才刷新數(shù)據(jù),一秒鐘的時(shí)間內(nèi),很可能用戶就已經(jīng)損失巨大財(cái)產(chǎn)了。
6.體育實(shí)況更新
全世界的球迷,體育愛好者特別多,當(dāng)然大家在關(guān)心自己喜歡的體育活動(dòng)的時(shí)候,比賽實(shí)時(shí)的賽況是他們最最關(guān)心的事情。這類新聞中最好的體驗(yàn)就是利用Websocket達(dá)到實(shí)時(shí)的更新!
7.視頻會(huì)議/聊天
視頻會(huì)議并不能代替和真人相見,但是他能讓分布在全球天涯海角的人聚在電腦前一起開會(huì)。既能節(jié)省大家聚在一起路上花費(fèi)的時(shí)間,討論聚會(huì)地點(diǎn)的糾結(jié),還能隨時(shí)隨地,只要有網(wǎng)絡(luò)就可以開會(huì)。
8.基于位置的應(yīng)用
越來越多的開發(fā)者借用移動(dòng)設(shè)備的GPS功能來實(shí)現(xiàn)他們基于位置的網(wǎng)絡(luò)應(yīng)用。如果你一直記錄用戶的位置(比如運(yùn)行應(yīng)用來記錄運(yùn)動(dòng)軌跡),你可以收集到更加細(xì)致化的數(shù)據(jù)。
9.在線教育
在線教育近幾年也發(fā)展迅速。優(yōu)點(diǎn)很多,免去了場地的限制,能讓名師的資源合理的分配給全國各地想要學(xué)習(xí)知識(shí)的同學(xué)手上,Websocket是個(gè)不錯(cuò)的選擇,可以視頻聊天、即時(shí)聊天以及其與別人合作一起在網(wǎng)上討論問題…
10.智能家居
這也是我一畢業(yè)加入的一個(gè)偉大的物聯(lián)網(wǎng)智能家居的公司。考慮到家里的智能設(shè)備的狀態(tài)必須需要實(shí)時(shí)的展現(xiàn)在手機(jī)app客戶端上,毫無疑問選擇了Websocket。
11.總結(jié)
從上面我列舉的這些場景來看,一個(gè)共同點(diǎn)就是,高實(shí)時(shí)性!
總結(jié)
以上是生活随笔為你收集整理的WebSocket原理及使用场景(转载)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 去哪儿旅行App怎么设置字体大小?(汉典
- 下一篇: intellij中重命名一个文件