WebSocket原理與實踐(一)---基本原理


WebSocket原理與實踐(一)---基本原理

一:為什么要使用WebSocket?
1. 了解現有的HTTP的架構模式:
Http是客戶端/服務器模式中請求-響應所用的協議,在這種模式中,客戶端(一般是web瀏覽器)向服務器提交HTTP請求,服務器響應請求的資源
(例如HTML頁面)和關於頁面的附加信息。

1-1. HTTP的特點是:
HTTP是半雙工協議,也就是說,在同一時刻流量只能單向流動,客戶端向服務器發送請求(單向的),然后服務器響應請求(單向的)。服務器不能主動推送數據給瀏覽器。

當初這么設計也是有原因的,假如服務器能主動推送數據給瀏覽器的話,那么瀏覽器很容易受到攻擊,比如一些廣告商會主動把一些廣告信息強行的傳輸給客戶端。
半雙工的缺點是:效率非常低下。
比如想實現股票的實時行情,火車票的剩余票數等這些,半雙工協議是無法做到的。

2. 了解HTTP輪詢,長輪詢和流化。
一般情況下,瀏覽器訪問網頁時,會向頁面所在的服務器發送一個HTTP請求,Web服務器確認請求並向瀏覽器返回響應。但是像股價,實時新聞等到達瀏覽器
顯示頁面時已經過時了,如果用戶想要得到最新的實時信息,他們就要不斷的刷新頁面,這種顯然是不切實際的。

輪詢: 輪詢是通過瀏覽器定時的向web服務器發送http的Get請求,服務器收到請求后,就把最新的數據發回給客戶端,客戶端得到數據后,將其顯示出來,然后再定期的重復這一過程,雖然可以滿足需求,但是存在一些缺點,比如某一段時間內web服務器沒有更新的數據,但是瀏覽器仍然需要定時的發送Get請求過來詢問,那么即浪費了帶寬,又浪費了cpu的利用率。
如下圖:

長輪詢: 客戶端向服務器請求信息,並在設定的時間段內打開一個連接,服務器如果沒有任何信息,會保持請求打開,直到有客戶端可用的信息,或者直到
指定的超時時間用完為止。這個時候,客戶端會重新向服務器請求信息。長輪詢也可以叫做Comet或反向ajax。它會延長HTTP響應的完成,直到服務器有
需要發送給客戶端的內容,這種技術通常可以叫 "掛起GET" 或 "擱置POST".

缺點是:
當信息量非常大的時候,長輪詢相對於http輪詢並沒有明顯的性能優勢,因為客戶端必須頻繁地重連到服務器以讀取新信息。造成網絡的表現和常規輪詢相同。

如下圖:

流化: 在流化技術中,客戶端發送一個請求,服務器發送並維護一個持續更新和保持打開的開放響應。每當服務器有需要交付給客戶端信息時,它就更新響應
。但是服務器從不發出完成HTTP響應的請求,從而使鏈接一直保持打開。在這種情況下,代理和防火牆可能緩存響應,導致信息交付的延遲增加。
因此許多流化對於存在防火牆和代理的網絡是不友好的。

3. 了解WebSocket
WebSocket是一種全雙工,雙向,單套接字連接,使用websocket,http請求變成打開websocket的鏈接的單一請求,並且重用從客戶端到服務器以及
服務器到客戶端的同一連接。

WebSocket減少了延遲,因為一旦建立起Websocket連接,服務器可以在消息可用時發送他們。和輪詢不同的是:WebSocket只發出一個請求,服務器
不需要等待來自客戶端的請求,且客戶端可以在任何時候向服務器端發送消息,和輪詢相比的話,不管是否有可用消息,每隔一段時間都發送一個請求,
單一請求大大減少了延遲。

優點有如下:
1. WebSocket使實時通信更加有效。能節約帶寬,CPU資源並減少延遲。
2. WebSocket使Web上客戶端和服務器之間的通信變得更加的簡單。
3. Websocket是一個底層網絡協議,我們可以在它的基礎之上構建其他的標准協議。

WebSocket的應用場景?
比如聊天,大型多人在線游戲,股票交易應用或實時新聞等。

二:了解WebSocket的相關API

見如下文章: http://www.cnblogs.com/tugenhua0707/p/8395669.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM