WebSocket原理及使用場景(轉載)

由輪詢到WebSocket

1 輪詢

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

2 長輪詢

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

3  WebSocket

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

WebSocket協議原理

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在通訊過程中,服務端監聽某個端口是否有連接請求,客戶端向服務端發送連接請求,服務端收到連接請求向客戶端發出接收消息,這樣一個連接就建立起來了。客戶端和服務端也都可以相互發送消息與對方進行通訊,直到雙方連接斷開

WebSocket的使用場景

1.社交聊天

最著名的就是微信,QQ,這一類社交聊天的app。這一類聊天app的特點是低延遲,高即時。即時是這裏面要求最高的,如果有一個緊急的事情,通過IM軟件通知你,假設網絡環境良好的情況下,這條message還無法立即送達到你的客戶端上,緊急的事情都結束了,你才收到消息,那麼這個軟件肯定是失敗的。

WebSocket原理及使用場景2.彈幕

說到這裏,大家一定裏面想到了A站和B站了。確實,他們的彈幕一直是一種特色。而且彈幕對於一個視頻來說,很可能彈幕纔是精華。發彈幕需要實時顯示,也需要和聊天一樣,需要即時。

3.多玩家遊戲

4.協同編輯

現在很多開源項目都是分散在世界各地的開發者一起協同開發,此時就會用到版本控制系統,比如Git,SVN去合併衝突。但是如果有一份文檔,支持多人實時在線協同編輯,那麼此時就會用到比如WebSocket了,它可以保證各個編輯者都在編輯同一個文檔,此時不需要用到Git,SVN這些版本控制,因爲在協同編輯界面就會實時看到對方編輯了什麼,誰在修改哪些段落和文字。

5.股票基金實時報價

金融界瞬息萬變——幾乎是每毫秒都在變化。如果採用的網絡架構無法滿足實時性,那麼就會給客戶帶來巨大的損失。幾毫秒錢股票開始大跌,幾秒以後才刷新數據,一秒鐘的時間內,很可能用戶就已經損失巨大財產了。

6.體育實況更新

全世界的球迷,體育愛好者特別多,當然大家在關心自己喜歡的體育活動的時候,比賽實時的賽況是他們最最關心的事情。這類新聞中最好的體驗就是利用Websocket達到實時的更新!

7.視頻會議/聊天

視頻會議並不能代替和真人相見,但是他能讓分佈在全球天涯海角的人聚在電腦前一起開會。既能節省大家聚在一起路上花費的時間,討論聚會地點的糾結,還能隨時隨地,只要有網絡就可以開會。

8.基於位置的應用

越來越多的開發者借用移動設備的GPS功能來實現他們基於位置的網絡應用。如果你一直記錄用戶的位置(比如運行應用來記錄運動軌跡),你可以收集到更加細緻化的數據。

9.在線教育

在線教育近幾年也發展迅速。優點很多,免去了場地的限制,能讓名師的資源合理的分配給全國各地想要學習知識的同學手上,Websocket是個不錯的選擇,可以視頻聊天、即時聊天以及其與別人合作一起在網上討論問題…

10.智能家居

這也是我一畢業加入的一個偉大的物聯網智能家居的公司。考慮到家裏的智能設備的狀態必須需要實時的展現在手機app客戶端上,毫無疑問選擇了Websocket。

11.總結

從上面我列舉的這些場景來看,一個共同點就是,高實時性!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章