WebSocket簡介一

HTML5作爲下一代web標準,擁有許多引人注目的新特性,如Canvas、本地存儲、多媒體編程接口、WebSocket等等。其中WebSocket具有“Web TCP”之稱。

Websocket的出現時基於web應用的實時性需要而產生的。這種實時的Web應用有很多,比如新浪微博的評論。私信的通知、騰訊的WebQQ等。

WebSocket出現之前,一般通過兩種方式來實現Web實時通訊:輪詢機制和流技術;其中輪詢有不同的輪詢,還有一種叫Comet的長輪詢。

輪詢:這是最早的一種實現實時Web應用的方案。客戶端以一定的時間間隔向服務器端發出請求,以頻繁請求的方式來保持客戶端和服務器端的同步。這種同步方案的缺點是,當客戶端以固定頻率向服務器端發起請求的時候,服務器端的數據可能並沒有更新,這樣會帶來很多無謂的網絡傳輸,所以這是一種非常低效的實時方案。

長輪詢:是對定時輪詢的改進和提高,目的是爲了降低無效的網絡傳輸。當服務器端沒有數據更新的時候,連接會保持一段時間週期直到數據或狀態改變或者時間過期,通過這種機制來減少無效的客戶端和服務器間的交互。當然,如果服務端的數據變更非常頻繁的話,這種機制和定時輪詢比較起來沒有本質上的性能的提高。

流:就是在客戶端的頁面使用一個隱藏的窗口向服務器端發出一個長連接的請求。服務器端接到這個請求後作出迴應並不斷更新連接狀態以保證客戶端和服務器端的連接不過期。通過這種機制可以將服務器端的信息源源不斷的推向客戶端。這種機制在用戶體驗上有一點問題,需要針對不同的瀏覽器設計不同的方案來改進用戶體驗,同時這種機制在併發比較大的情況下,對服務器端的資源是一個極大的考驗。

上述方式其實並不是真正的實時技術,只是使用了一種技巧來實現的模擬實時。在每次客戶端和服務器交互的時候都是一次HTTP請求和應答的過程,而每一次的HTTP請求和應答都帶有完整的HTTP頭信息,這就是增加了每次傳輸的數據量。但這些方式最痛苦的是開發人員,因爲不論客戶端環視服務器端的實現都很複雜,爲了模擬比較真實的實時效果,開發人員往往需要構造兩個HTTP連接來模擬客戶端和服務器之間的雙向通訊,一個連接用來處理客戶端到服務器端的負載,制約了應用系統的擴展性。

基於上述弊端,實現Web實時應用的技術出現了,WebSocket通過瀏覽器提供的API真正實現了具備像C/S架構下的桌面系統的實時通訊能力。其原理是使用JavaScript調用瀏覽器的API發出一個WebSocket請求至服務器,經過一次握手,和服務器建立了TCP通訊,因爲它本質上是一個TCP連接,所以數據傳輸的穩定性和數據傳輸比較小。

 

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