websocket概述
更新時間 2024-05-28 16:43:16
最近更新時間: 2024-05-28 16:43:16
分享文章
本文簡述websocket協議特點和應用場景。
背景介紹
- HTTP 協議有一個缺陷:通信只能由客戶端發起。這種單向請求的特點,注定了如果服務器有連續的狀態變化,客戶端要獲知就只能使用"輪詢"的方案。
- 輪詢是在特定的時間間隔(如每1秒),由瀏覽器對服務器發出HTTP請求,然后由服務器返回最新的數據給客戶端的瀏覽器。這種傳統的模式帶來很明顯的缺點,即瀏覽器需要不斷的向服務器發出請求,顯而易見,輪詢不僅效率特別低,且特別浪費帶寬資源,因為HTTP請求可能包含較長的頭部,其中真正有效的數據可能只是很小的一部分,顯然這樣會浪費很多帶寬資源。
- 因此,工程師們一直在思考,有沒有更好的方法。websocket 就是這樣發明的。websocket 協議誕生于2008年,2011年成為國際標準,目前所有瀏覽器均已支持。它最大的特點全雙工通信,瀏覽器和服務器只需要做一個握手的動作,然后瀏覽器和服務器之間就形成了一條快速通道,兩者之間就可以直接互相傳送數據了,如下右圖所示。可見,websocket 協議,能更好的節省服務器資源和帶寬,并且能夠更實時地進行通訊。

websocket的優勢:
- 較少的控制開銷:在連接創建后,服務器和客戶端之間交換數據時,用于協議控制的數據包頭部相對較小。
- 更強的實時性:由于協議是全雙工的,所以服務器可以隨時主動給客戶端下發數據。相對于HTTP請求需要等待客戶端發起請求服務端才能響應,延遲明顯更少;即使是和Comet等類似的長輪詢比較,其也能在短時間內更多次地傳遞數據。
- 保持連接狀態:與HTTP不同的是,Websocket需要先創建連接,這就使得其成為一種有狀態的協議,之后通信時可以省略部分狀態信息。而HTTP請求可能需要在每個請求都攜帶狀態信息(如身份認證等)。
- 更好的二進制支持:Websocket定義了二進制幀,相對HTTP,可以更輕松地處理二進制內容。
- 可以支持擴展:Websocket定義了擴展,用戶可以擴展協議、實現部分自定義的子協議。
- 更好的壓縮效果:相對于HTTP壓縮,Websocket在適當的擴展支持下,可以沿用之前內容的上下文,在傳遞類似的數據時,可以顯著地提高壓縮率。
- 與 HTTP 協議有著良好的兼容性:默認端口也是80和443,并且握手階段采用 HTTP 協議,因此握手時不容易屏蔽,能通過各種 HTTP 代理服務器。
- 沒有同源限制:客戶端可以與任意服務器通信。
websocket應用場景
場景一:彈幕
彈幕的流程是終端用戶A在自己的客戶端廣播了一條信息,這條信息需要在與其他N個用戶端發送的彈幕信息一并展示在A這邊。它需要馬上顯示到屏幕上,對實時性要求極高。使用websocket可以在有新彈幕產生時,服務器能夠迅速推送給所有用戶端,保障彈幕實時性。
場景二:在線教育
在線教育跨越了時空的限制,學生與老師進行一對多/一對一的在線授課,老師在客戶端內編寫的筆記、大綱、白板信息等信息,需要實時推送至多個學生的客戶端,同時在課堂上,通話、文字聊天、實時解題等交互的實時性要求非常高,需要通過websocket協議來完成。
場景三:金融產品實時信息查詢
股票價格瞬息萬變,如果顯示數據不及時,很有可能會影響用戶的收益。需要通過websocket協議流式更新數據變化,將價格實時推送至世界各地的客戶端,方便交易員迅速做出交易判斷。
場景四:體育實況更新
由于全世界體育愛好者數量眾多,比賽實況成為他們最為關心的熱點。websocket能夠助力體育新聞類服務的用戶降低延時,獲得實時的更新。
場景五:視頻會議和互動直播
盡管視頻會議并不能代替和真人相見,但是應用場景眾多。而互動直播和視頻會議中的連麥的服務對低延時的要求非常高。試想主播或者你的主管說了一句話后,你要10秒后才能聽到,那你們是根本無法進行正常交流的 。websocket可以幫助兩端或多端接入會議/直播的用戶實時傳遞信息。