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