WebSocket原理及使用场景(转载)
由輪詢到WebSocket
1 輪詢
客戶端和服務(wù)器之間會一直進行連接,每隔一段時間就詢問一次??蛻舳藭喸?#xff0c;有沒有新消息。這種方式連接數(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ù)?#xff0c;比如會將一條消息分為幾個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ā)送消息與對方進行通訊,直到雙方連接斷開
WebSocket的使用場景
1.社交聊天
最著名的就是微信,QQ,這一類社交聊天的app。這一類聊天app的特點是低延遲,高即時。即時是這里面要求最高的,如果有一個緊急的事情,通過IM軟件通知你,假設(shè)網(wǎng)絡(luò)環(huán)境良好的情況下,這條message還無法立即送達到你的客戶端上,緊急的事情都結(jié)束了,你才收到消息,那么這個軟件肯定是失敗的。
WebSocket原理及使用場景2.彈幕
說到這里,大家一定里面想到了A站和B站了。確實,他們的彈幕一直是一種特色。而且彈幕對于一個視頻來說,很可能彈幕才是精華。發(fā)彈幕需要實時顯示,也需要和聊天一樣,需要即時。
3.多玩家游戲
4.協(xié)同編輯
現(xiàn)在很多開源項目都是分散在世界各地的開發(fā)者一起協(xié)同開發(fā),此時就會用到版本控制系統(tǒng),比如Git,SVN去合并沖突。但是如果有一份文檔,支持多人實時在線協(xié)同編輯,那么此時就會用到比如WebSocket了,它可以保證各個編輯者都在編輯同一個文檔,此時不需要用到Git,SVN這些版本控制,因為在協(xié)同編輯界面就會實時看到對方編輯了什么,誰在修改哪些段落和文字。
5.股票基金實時報價
金融界瞬息萬變——幾乎是每毫秒都在變化。如果采用的網(wǎng)絡(luò)架構(gòu)無法滿足實時性,那么就會給客戶帶來巨大的損失。幾毫秒錢股票開始大跌,幾秒以后才刷新數(shù)據(jù),一秒鐘的時間內(nèi),很可能用戶就已經(jīng)損失巨大財產(chǎn)了。
6.體育實況更新
全世界的球迷,體育愛好者特別多,當然大家在關(guān)心自己喜歡的體育活動的時候,比賽實時的賽況是他們最最關(guān)心的事情。這類新聞中最好的體驗就是利用Websocket達到實時的更新!
7.視頻會議/聊天
視頻會議并不能代替和真人相見,但是他能讓分布在全球天涯海角的人聚在電腦前一起開會。既能節(jié)省大家聚在一起路上花費的時間,討論聚會地點的糾結(jié),還能隨時隨地,只要有網(wǎng)絡(luò)就可以開會。
8.基于位置的應(yīng)用
越來越多的開發(fā)者借用移動設(shè)備的GPS功能來實現(xiàn)他們基于位置的網(wǎng)絡(luò)應(yīng)用。如果你一直記錄用戶的位置(比如運行應(yīng)用來記錄運動軌跡),你可以收集到更加細致化的數(shù)據(jù)。
9.在線教育
在線教育近幾年也發(fā)展迅速。優(yōu)點很多,免去了場地的限制,能讓名師的資源合理的分配給全國各地想要學(xué)習(xí)知識的同學(xué)手上,Websocket是個不錯的選擇,可以視頻聊天、即時聊天以及其與別人合作一起在網(wǎng)上討論問題…
10.智能家居
這也是我一畢業(yè)加入的一個偉大的物聯(lián)網(wǎng)智能家居的公司。考慮到家里的智能設(shè)備的狀態(tài)必須需要實時的展現(xiàn)在手機app客戶端上,毫無疑問選擇了Websocket。
11.總結(jié)
從上面我列舉的這些場景來看,一個共同點就是,高實時性!
總結(jié)
以上是生活随笔為你收集整理的WebSocket原理及使用场景(转载)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 去哪儿旅行App怎么设置字体大小?(汉典
- 下一篇: intellij中重命名一个文件