websocket與http優缺點

一、websocket與http
WebSocket是HTML5中的協議,支持持久連接;而Http協議不支持持久連接。

首先HTMl5指的是一系列新的API,或者說新規範,新技術。WebSocket是HTML5中新協議、新API.跟HTTP協議基本沒有關係。

Http協議本身只有1.0和1.1,也就是所謂的Keep-alive,把多個Http請求合併爲一個。

WebSocket是HTML5中的協議,支持持久連接;而Http協議不支持持久連接。

二、Websocket是什麼樣的協議,具體有什麼優點
首先,Websocket是一個持久化的協議,相對於HTTP這種非持久的協議來說

HTTP的生命週期通過 Request 來界定,也就是一個 Request 一個 Response ,那麼在 HTTP1.0 中,這次HTTP請求就結束了。

在HTTP1.1中進行了改進,使得有一個keep-alive,也就是說,在一個HTTP連接中,可以發送多個Request,接收多個Response。但是請記住 Request = Response , 在HTTP中永遠是這樣,也就是說一個request只能有一個response。而且這個response也是被動的,不能主動發起。

三、Websocket的作用
(1)ajax輪詢

ajax輪詢的原理非常簡單,讓瀏覽器隔個幾秒就發送一次請求,詢問服務器是否有新信息。

(2)long poll(長輪詢)

long poll 其實原理跟 ajax輪詢 差不多,都是採用輪詢的方式,不過採取的是阻塞模型(一直打電話,沒收到就不掛電話),也就是說,客戶端發起連接後,如果沒消息,就一直不返回Response給客戶端(對於PHP有最大執行時間,建議沒消息,執行到一定時間也返回)。直到有消息才返回,返回完之後,客戶端再次建立連接,周而復始。

從上面可以看出其實這兩種方式,都是在不斷地建立HTTP連接,關閉HTTP協議,由於HTTP是非狀態性的,每次都要重新傳輸 identity info (鑑別信息),來告訴服務端你是誰。然後等待服務端處理,可以體現HTTP協議的另外一個特點,被動性。

何爲被動性呢,其實就是,服務端不能主動聯繫客戶端,只能有客戶端發起。從上面很容易看出來,不管怎麼樣,上面這兩種都是非常消耗資源的。

ajax輪詢 需要服務器有很快的處理速度和資源。(速度)long poll 需要有很高的併發,也就是說同時接待客戶的能力。(場地大小)

(3)WebSocket

Websocket解決了HTTP的這幾個難題。首先,被動性,當服務器完成協議升級後(HTTP->Websocket),服務端就可以主動推送信息給客戶端啦。解決了上面同步有延遲的問題。

解決服務器上消耗資源的問題:其實我們所用的程序是要經過兩層代理的,即HTTP協議在Nginx等服務器的解析下,然後再傳送給相應的Handler(php等)來處理。簡單地說,我們有一個非常快速的 接線員(Nginx) ,他負責把問題轉交給相應的 客服(Handler) 。Websocket就解決了這樣一個難題,建立後,可以直接跟接線員建立持久連接,有信息的時候客服想辦法通知接線員,然後接線員在統一轉交給客戶。

由於Websocket只需要一次HTTP握手,所以說整個通訊過程是建立在一次連接/狀態中,也就避免了HTTP的非狀態性,服務端會一直知道你的信息,直到你關閉請求,這樣就解決了接線員要反覆解析HTTP協議,還要查看identity info的信息。

目前唯一的問題是:不兼容低版本的IE
1WebSocket是HTML5中的協議,支持持久連接;而Http協議不支持持久連接。

首先HTMl5指的是一系列新的API,或者說新規範,新技術。WebSocket是HTML5中新協議、新API.跟HTTP協議基本沒有關係。

Http協議本身只有1.0和1.1,也就是所謂的Keep-alive,把多個Http請求合併爲一個。

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