真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Websocket原理是什么-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)Websocket原理是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

創(chuàng)新互聯(lián)咨詢熱線:18982081108,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),創(chuàng)新互聯(lián)網(wǎng)頁制作領(lǐng)域十載,包括成都電動窗簾等多個行業(yè)擁有豐富的營銷推廣經(jīng)驗,選擇創(chuàng)新互聯(lián),為企業(yè)錦上添花!

一、websocket與http

WebSocket是HTML5出的東西(協(xié)議),也就是說HTTP協(xié)議沒有變化,或者說沒關(guān)系,但HTTP是不支持持久連接的(長連接,循環(huán)連接的不算)

首先HTTP有 1.11.0 之說,也就是所謂的 keep-alive ,把多個HTTP請求合并為一個,但是 Websocket 其實是一個新協(xié)議,跟HTTP協(xié)議基本沒有關(guān)系,只是為了兼容現(xiàn)有瀏覽器的握手規(guī)范而已,也就是說它是HTTP協(xié)議上的一種補充可以通過這樣一張圖理解

Websocket原理是什么

有交集,但是并不是全部。

另外Html5是指的一系列新的API,或者說新規(guī)范,新技術(shù)。Http協(xié)議本身只有1.0和1.1,而且跟Html本身沒有直接關(guān)系。。通俗來說,你可以用HTTP協(xié)議傳輸非Html數(shù)據(jù),就是這樣=。=

再簡單來說,層級不一樣。

二、Websocket是什么樣的協(xié)議,具體有什么優(yōu)點

首先,Websocket是一個持久化的協(xié)議,相對于HTTP這種非持久的協(xié)議來說。簡單的舉個例子吧,用目前應(yīng)用比較廣泛的PHP生命周期來解釋。

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

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

教練,你BB了這么多,跟Websocket有什么關(guān)系呢?_(:з」∠)_好吧,我正準(zhǔn)備說Websocket呢。。

首先Websocket是基于HTTP協(xié)議的,或者說借用了HTTP的協(xié)議來完成一部分握手。

首先我們來看個典型的 Websocket 握手(借用Wikipedia的。。)

GET /chat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==Sec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 13Origin: http://example.com

熟悉HTTP的童鞋可能發(fā)現(xiàn)了,這段類似HTTP協(xié)議的握手請求中,多了幾個東西。我會順便講解下作用。

Upgrade: websocketConnection: Upgrade

這個就是Websocket的核心了,告訴 Apache 、 Nginx 等服務(wù)器:注意啦,我發(fā)起的是Websocket協(xié)議,快點幫我找到對應(yīng)的助理處理~不是那個老土的HTTP。

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==Sec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 13

首先, Sec-WebSocket-Key 是一個 Base64 encode 的值,這個是瀏覽器隨機生成的,告訴服務(wù)器:泥煤,不要忽悠窩,我要驗證尼是不是真的是Websocket助理。

然后, Sec_WebSocket-Protocol 是一個用戶定義的字符串,用來區(qū)分同URL下,不同的服務(wù)所需要的協(xié)議。簡單理解:今晚我要服務(wù)A,別搞錯啦~

最后, Sec-WebSocket-Version 是告訴服務(wù)器所使用的 Websocket Draft (協(xié)議版本),在最初的時候,Websocket協(xié)議還在 Draft 階段,各種奇奇怪怪的協(xié)議都有,而且還有很多期奇奇怪怪不同的東西,什么Firefox和Chrome用的不是一個版本之類的,當(dāng)初Websocket協(xié)議太多可是一個大難題。。不過現(xiàn)在還好,已經(jīng)定下來啦~大家都使用的一個東西~ 脫水: 服務(wù)員,我要的是13歲的噢→_→

然后服務(wù)器會返回下列東西,表示已經(jīng)接受到請求, 成功建立Websocket啦!

HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=Sec-WebSocket-Protocol: chat

這里開始就是HTTP最后負(fù)責(zé)的區(qū)域了,告訴客戶,我已經(jīng)成功切換協(xié)議啦~

Upgrade: websocketConnection: Upgrade

依然是固定的,告訴客戶端即將升級的是 Websocket 協(xié)議,而不是mozillasocket,lurnarsocket或者shitsocket。

然后, Sec-WebSocket-Accept 這個則是經(jīng)過服務(wù)器確認(rèn),并且加密過后的 Sec-WebSocket-Key 。 服務(wù)器:好啦好啦,知道啦,給你看我的ID CARD來證明行了吧。。

后面的, Sec-WebSocket-Protocol 則是表示最終使用的協(xié)議。

至此,HTTP已經(jīng)完成它所有工作了,接下來就是完全按照Websocket協(xié)議進(jìn)行了。具體的協(xié)議就不在這闡述了。

——————技術(shù)解析部分完畢——————

Websocket原理是什么

你TMD又BBB了這么久,那到底Websocket有什么鬼用, http long poll ,或者ajax輪詢 不都可以實現(xiàn)實時信息傳遞么。

Websocket原理是什么

好好好,年輕人,那我們來講一講Websocket有什么用。來給你吃點胡(蘇)蘿(丹)卜(紅)

Websocket原理是什么

三、Websocket的作用

在講Websocket之前,我就順帶著講下 long pollajax輪詢 的原理。

ajax輪詢

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

場景再現(xiàn):

客戶端:啦啦啦,有沒有新信息(Request)

服務(wù)端:沒有(Response)

客戶端:啦啦啦,有沒有新信息(Request)

服務(wù)端:沒有。。(Response)

客戶端:啦啦啦,有沒有新信息(Request)

服務(wù)端:你好煩啊,沒有啊。。(Response)

客戶端:啦啦啦,有沒有新消息(Request)

服務(wù)端:好啦好啦,有啦給你。(Response)

客戶端:啦啦啦,有沒有新消息(Request)

服務(wù)端:。。。。。沒。。。。沒。。。沒有(Response) —- loop

long poll

long poll 其實原理跟 ajax輪詢 差不多,都是采用輪詢的方式,不過采取的是阻塞模型(一直打電話,沒收到就不掛電話),也就是說,客戶端發(fā)起連接后,如果沒消息,就一直不返回Response給客戶端。直到有消息才返回,返回完之后,客戶端再次建立連接,周而復(fù)始。

場景再現(xiàn):

客戶端:啦啦啦,有沒有新信息,沒有的話就等有了才返回給我吧(Request)

服務(wù)端:額。。 等待到有消息的時候。。來 給你(Response)

客戶端:啦啦啦,有沒有新信息,沒有的話就等有了才返回給我吧(Request) -loop

從上面可以看出其實這兩種方式,都是在不斷地建立HTTP連接,然后等待服務(wù)端處理,可以體現(xiàn)HTTP協(xié)議的另外一個特點,被動性。

何為被動性呢,其實就是,服務(wù)端不能主動聯(lián)系客戶端,只能有客戶端發(fā)起。

簡單地說就是,服務(wù)器是一個很懶的冰箱(這是個梗)(不會、不能主動發(fā)起連接),但是上司有命令,如果有客戶來,不管多么累都要好好接待。

說完這個,我們再來說一說上面的缺陷(原諒我廢話這么多吧OAQ)

從上面很容易看出來,不管怎么樣,上面這兩種都是非常消耗資源的。

ajax輪詢 需要服務(wù)器有很快的處理速度和資源。(速度)long poll 需要有很高的并發(fā),也就是說同時接待客戶的能力。(場地大?。?/p>

所以 ajax輪詢long poll 都有可能發(fā)生這種情況。

客戶端:啦啦啦啦,有新信息么?

服務(wù)端:月線正忙,請稍后再試(503 Server Unavailable)

客戶端:。。。。好吧,啦啦啦,有新信息么?

服務(wù)端:月線正忙,請稍后再試(503 Server Unavailable)

客戶端:然后服務(wù)端在一旁忙的要死:冰箱,我要更多的冰箱!更多。。更多。。(我錯了。。這又是梗。。)

言歸正傳,我們來說Websocket吧

通過上面這個例子,我們可以看出,這兩種方式都不是最好的方式,需要很多資源。

一種需要更快的速度,一種需要更多的’電話’。這兩種都會導(dǎo)致’電話’的需求越來越高。

哦對了,忘記說了HTTP還是一個狀態(tài)協(xié)議。

通俗的說就是,服務(wù)器因為每天要接待太多客戶了,是個健忘鬼,你一掛電話,他就把你的東西全忘光了,把你的東西全丟掉了。你第二次還得再告訴服務(wù)器一遍。

所以在這種情況下出現(xiàn)了,Websocket出現(xiàn)了。他解決了HTTP的這幾個難題。首先,被動性,當(dāng)服務(wù)器完成協(xié)議升級后(HTTP->Websocket),服務(wù)端就可以主動推送信息給客戶端啦。所以上面的情景可以做如下修改。

客戶端:啦啦啦,我要建立Websocket協(xié)議,需要的服務(wù):chat,Websocket協(xié)議版本:17(HTTP Request)

服務(wù)端:ok,確認(rèn),已升級為Websocket協(xié)議(HTTP Protocols Switched)

客戶端:麻煩你有信息的時候推送給我噢。。

服務(wù)端:ok,有的時候會告訴你的。

服務(wù)端:balabalabalabala

服務(wù)端:balabalabalabala

服務(wù)端:哈哈哈哈哈啊哈哈哈哈

服務(wù)端:笑死我了哈哈哈哈哈哈哈

就變成了這樣,只需要經(jīng)過一次HTTP請求,就可以做到源源不斷的信息傳送了。(在程序設(shè)計中,這種設(shè)計叫做回調(diào),即:你有信息了再來通知我,而不是我傻乎乎的每次跑來問你 )

這樣的協(xié)議解決了上面同步有延遲,而且還非常消耗資源的這種情況。那么為什么他會解決服務(wù)器上消耗資源的問題呢?

其實我們所用的程序是要經(jīng)過兩層代理的,即HTTP協(xié)議在Nginx等服務(wù)器的解析下,然后再傳送給相應(yīng)的Handler(PHP等)來處理。簡單地說,我們有一個非常快速的 接線員(Nginx) ,他負(fù)責(zé)把問題轉(zhuǎn)交給相應(yīng)的 客服(Handler) 。

本身接線員基本上速度是足夠的,但是每次都卡在客服(Handler)了,老有客服處理速度太慢。,導(dǎo)致客服不夠。Websocket就解決了這樣一個難題,建立后,可以直接跟接線員建立持久連接,有信息的時候客服想辦法通知接線員,然后接線員在統(tǒng)一轉(zhuǎn)交給客戶。

這樣就可以解決客服處理速度過慢的問題了。

同時,在傳統(tǒng)的方式上,要不斷的建立,關(guān)閉HTTP協(xié)議,由于HTTP是非狀態(tài)性的,每次都要重新傳輸 identity info (鑒別信息),來告訴服務(wù)端你是誰。

雖然接線員很快速,但是每次都要聽這么一堆,效率也會有所下降的,同時還得不斷把這些信息轉(zhuǎn)交給客服,不但浪費客服的處理時間,而且還會在網(wǎng)路傳輸中消耗過多的流量/時間。

但是Websocket只需要一次HTTP握手,所以說整個通訊過程是建立在一次連接/狀態(tài)中,也就避免了HTTP的非狀態(tài)性,服務(wù)端會一直知道你的信息,直到你關(guān)閉請求,這樣就解決了接線員要反復(fù)解析HTTP協(xié)議,還要查看identity info的信息。

同時由客戶主動詢問,轉(zhuǎn)換為服務(wù)器(推送)有信息的時候就發(fā)送(當(dāng)然客戶端還是等主動發(fā)送信息過來的。。),沒有信息的時候就交給接線員(Nginx),不需要占用本身速度就慢的客服(Handler)了

至于怎么在不支持Websocket的客戶端上使用Websocket。。答案是: 不能

但是可以通過上面說的 long pollajax 輪詢 來 模擬出類似的效果

關(guān)于Websocket原理是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)頁標(biāo)題:Websocket原理是什么-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://weahome.cn/article/dggdoh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部