WebSocket是html5出的東西(協(xié)議),也就是說HTTP協(xié)議沒有變化,或者說沒關系,但HTTP是不支持持久連接的(長連接,循環(huán)連接得不算)
首先HTML5 是一個很寬廣的概念,是對大量新 API 的總稱。不存在 HTTP5 的概念,HTTP 最高的版本號是 1.1。HTTP有1.1和1.0之說,也就是所謂的keep-alive,把多個HTTP請求合并為一個,但是Websocket其實是一個新協(xié)議,
簡單來說,你可以完全拋開 HTML5 和 HTML4 的概念,只考慮瀏覽器要么支持 WebSocket,要么不支持。跟HTTP協(xié)議基本沒有關系,只是為了兼容現(xiàn)有瀏覽器的握手規(guī)范而已,也就是說它是HTTP協(xié)議上的一種補充可以通過這樣一張圖理解
![]()
而且眾所周知,Web應用的通信過程通常是客戶端通過瀏覽器發(fā)出一個請求,服務器端接收請求后進行處理并返回結果給客戶端,客戶端瀏覽器將信息呈現(xiàn)。Web領域的實時推送技術,也被稱之為Realtime技術。這種技術要達到的目的是讓用戶不需要刷新瀏覽器就可以獲得實時更新。
“websocket出現(xiàn)是因為瀏覽器不給開后門”,“不是WebSocket基于HTTP,相反,可以看成可以看成可以看成HTTP基于WebSocket”。
首先,Websocket是一個持久化的協(xié)議,相對于HTTP這種非持久的協(xié)議來說。HTTP的生命周期通過Request來界定,也就是一個Request 一個Response,那么在HTTP1.0中,這次HTTP請求就結束了。
![]()
你也可以把它WebSocket 看成是 HTTP 協(xié)議為了支持長連接所打的一個大補丁,它和 HTTP 有一些共性,是為了解決 HTTP 本身無法解決的某些問題而做出的一個改良設計。
基于Flash,AdobeFlash通過自己的Socket實現(xiàn)完成數(shù)據(jù)交換,再利用Flash暴露出相應的接口給JAVAScript調(diào)用,從而達到實時傳輸目的。
Web實時推送:就不得不說WebSocket。在WebSocket出現(xiàn)之前,很多網(wǎng)站為了實現(xiàn)實時推送技術,在websocket出現(xiàn)之前,web交互一般是基于http協(xié)議的短連接或者長連接。通常采用的方案是輪詢(Polling)和Comet技術,
Comet又可細分為兩種實現(xiàn)方式:一種是長輪詢機制,一種稱為流技術,這兩種方式實際上是對輪詢技術的改進,這些方案帶來很明顯的缺點,需要由瀏覽器對服務器發(fā)出HTTP request,大量消耗服務器帶寬和資源。
而在傳統(tǒng)的Web模式里,在處理高并發(fā)及實時性需求的時候,會遇到難以逾越的瓶頸,需要一種高效節(jié)能的雙向通信機制來保證數(shù)據(jù)的實時傳輸。websocket是一種全新的協(xié)議,不屬于http無狀態(tài)協(xié)議,協(xié)議名為"ws",這意味著一個websocket鏈接地址會是這樣的寫法:ws://**。
websocket約定了一個通信的規(guī)范,通過一個握手的機制,客戶端和服務器之間能建立一個類似tcp的連接,從而方便它們之間的通信。
WebSocket實際上可以看作HTTP的降級!“不是WebSocket基于HTTP,而是可以看成可以看成可以看成HTTP基于WebSocket”。






