Websocket協(xié)議(學(xué)習(xí)總結(jié))

說到協(xié)議掂僵,我們第一反應(yīng)都會(huì)想到http,既然這樣顷歌,那就對(duì)Http協(xié)議再簡(jiǎn)單的BB一番锰蓬,沒有對(duì)比就沒有傷害,我們來見證一下最終是誰會(huì)是受傷的一方眯漩,當(dāng)然結(jié)果還是你說了算芹扭,不要問小編為什么,因?yàn)槟闩1瓢 ?br>

Http協(xié)議:

眾所周知的超文本傳輸協(xié)議,所有的萬維網(wǎng)都遵循此協(xié)議冯勉,這家伙出道早(1945年傳說中RFC-http1.0)澈蚌,加上又沒有競(jìng)爭(zhēng)對(duì)手可稱之為在協(xié)議界的一大霸主。

建立在TCP協(xié)議之上灼狰,稱之為http宛瞄,但是建立在SSL和TLS協(xié)議層之上,又變成了人們常說的https交胚》莺梗總之不管怎樣,他們只是所承載的協(xié)議層不同罷了蝴簇,不要太介懷杯活。如果你很是介懷,沒辦法熬词,小編只能說你先去熟悉網(wǎng)絡(luò)的7層協(xié)議旁钧,一層層分析,慢慢介懷去互拾。

再來簡(jiǎn)單說下歪今,http請(qǐng)求響應(yīng)模式:

宏觀上看是不是超級(jí)簡(jiǎn)單?一個(gè)Request 對(duì)應(yīng)一個(gè) Response颜矿。建立連接后寄猩,客戶端發(fā)送一次請(qǐng)求,服務(wù)端確認(rèn)收到了骑疆,就被動(dòng)反應(yīng)一下田篇。看起來很不友好的樣子箍铭,在1.0時(shí)更可憐泊柬,默認(rèn)的是短連接,客戶端和服務(wù)端之間頻繁的建立連接诈火,頻繁的斷開連接彬呻,在1.1起開始引入keep-alive(長(zhǎng)連接)即是在http請(qǐng)求的header中加了一個(gè)識(shí)別:connetion:keep-alive(代表告訴服務(wù)器,我要的是長(zhǎng)連接)柄瑰。

但依舊解決不了服務(wù)端的‘高冷’和‘惰性’。因此引發(fā)了下一個(gè)問題:http協(xié)議是有很大缺陷的剪况。

Http協(xié)議的缺點(diǎn):

通過上面簡(jiǎn)單的介紹教沾,我們明顯感覺到,客戶端和服務(wù)端之間的交互有點(diǎn)生硬译断,服務(wù)端有點(diǎn)被動(dòng)授翻,客戶端問一句,服務(wù)端答一句,客戶端沒命的啰嗦就會(huì)導(dǎo)致浪費(fèi)時(shí)間和帶寬(針對(duì)于短連接來說)堪唐。

如果是長(zhǎng)連接的話巡语,那可能更慘,客戶端發(fā)一個(gè)請(qǐng)求淮菠,服務(wù)端沒有及時(shí)返回男公,鏈接就一直建立著,上面也說了合陵,http的相應(yīng)模式無論是多少臺(tái)客戶端發(fā)出請(qǐng)求枢赔,服務(wù)端的標(biāo)配是一個(gè)request對(duì)應(yīng)一個(gè)response,如此說來拥知,如果很多的這樣的鏈接的話踏拜,那么服務(wù)端就有扛不住的時(shí)候,所以有的時(shí)候就會(huì)碰到server is too busy低剔,這時(shí)你又該罵娘了速梗。

說到這,我們?cè)賮碚f說襟齿,這種不友好的相應(yīng)模式最終的根源是啥姻锁。

哦,原來是有兩種機(jī)制導(dǎo)致的蕊唐,Ajax輪詢long poll的輪詢機(jī)制屋摔,分別對(duì)應(yīng)短連接和長(zhǎng)連接的實(shí)現(xiàn)形式。

ajax輪詢是替梨,孜孜不倦钓试,樂在其中啊,那我就隔幾秒請(qǐng)求一次副瀑,服務(wù)端和客戶端來回的斷開建立弓熏,就這樣一問一答直到客戶端拿到了自己想要的東西,所以這種溝通賊浪費(fèi)時(shí)間和寬帶糠睡。

long poll呢也是采用了輪詢機(jī)制挽鞠,但是他輪詢的時(shí)間比較長(zhǎng),如果把a(bǔ)jax看成是發(fā)短信狈孔,那他就是打電話了(可以稱之為阻塞模型)信认,客戶端就和服務(wù)端杠上了,高冷是嗎均抽?沒關(guān)系嫁赏,我會(huì)一直等,等你有數(shù)據(jù)反饋給我油挥,就這樣一直占線輪詢潦蝇。

綜上所述款熬,http的一大‘亮點(diǎn)’就是,客戶端不請(qǐng)求攘乒,服務(wù)端絕對(duì)不會(huì)主動(dòng)贤牛。凸顯了http數(shù)據(jù)傳輸?shù)囊粋€(gè)被動(dòng)性。

WebSocket協(xié)議:

這個(gè)社會(huì)是發(fā)展的则酝,所有風(fēng)靡一時(shí)的榮耀最終都會(huì)被崛起的新事物給慢慢取代殉簸,當(dāng)然說的有點(diǎn)嚴(yán)重,反正就是那意思了堤魁。鑒于http的缺點(diǎn)喂链,伴隨著http的發(fā)展,直到h5出現(xiàn)妥泉,Websocket應(yīng)運(yùn)而生椭微。

不過,新事物的單身往往都是踩在巨人的肩膀上的盲链,WebSocket也是基于http協(xié)議的一種持久化的協(xié)議蝇率,并不是跟http毫無關(guān)系,可以說是http協(xié)議的一種進(jìn)化刽沾。

那么Websocket是怎樣建立連接的呢本慕?

GET /chat HTTP/1.1

Host: server.example.com

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==

Sec-WebSocket-Protocol: chat, superchat

Sec-WebSocket-Version: 13 Origin: http://example.com

以上是請(qǐng)求的頭,Websocket很是高調(diào)啊侧漓,生怕對(duì)方不知道是自己的協(xié)議锅尘,整了這么多關(guān)鍵字眼,廢話不多說布蔗,抽幾個(gè)關(guān)鍵的說說吧藤违。

Upgrade && Connection:告訴服務(wù)端我采取的是什么協(xié)議。

Sec-WebSocket-Key:別亂來纵揍,我是有身份證的顿乒。

剩下的就不說了,很顯然泽谨,客戶端是比較仔細(xì)的璧榄,定制的很是詳細(xì)。

服務(wù)器接到請(qǐng)求后吧雹,就回應(yīng)了下:

HTTP/1.1 101 Switching Protocols

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=

Sec-WebSocket-Protocol: chat

看起來服務(wù)端也是很守規(guī)矩骨杂,告訴客戶端,你看看信息對(duì)不對(duì)雄卷。

細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)腊脱,不對(duì)啊,那個(gè)發(fā)送的key和請(qǐng)求的key怎么不一樣呢龙亲?孩子別太單純那是服務(wù)端加過密的陕凹,小編沒搞錯(cuò)的話應(yīng)該是SHA-1的加密方式。

好了鳄炉,以上就是客戶端和服務(wù)端建立連接的過程杜耙。

Websocket特點(diǎn):

回歸到http協(xié)議的被動(dòng)性和一些缺點(diǎn),那么Websocket協(xié)議就凸顯的很好了拂盯,請(qǐng)求只需要成功建立一次佑女,這次咸魚翻身了,服務(wù)端會(huì)屁顛屁顛的主動(dòng)把信息反饋給客戶端谈竿,完美解決了之前的被動(dòng)性团驱,提高溝通效率,減少了溝通成本空凸,真正建立了久連接嚎花。

但是,人無完人呀洲,websockt需要瀏覽器的支持紊选,如果有些瀏覽器不支持,也沒什么卵用了道逗。另外假如設(shè)置的有代理兵罢,需要代理也支持。更要命的是需要服務(wù)器支持滓窍,如果服務(wù)器不支持卖词,那對(duì)不起,發(fā)了一堆什么破亂玩意吏夯,本座不認(rèn)識(shí)此蜈,打回!

另外锦亦,websocket實(shí)現(xiàn)的是雙向通道舶替,對(duì)網(wǎng)絡(luò)的鏈接要求很高,這是其優(yōu)點(diǎn)也是缺點(diǎn)杠园,一旦一方網(wǎng)絡(luò)有問題顾瞪,那就直接game-over了。

小編有話說:

以上是本人看了些資料抛蚁,加以消化和總結(jié)的陈醒,有什么不對(duì)的地方希望給出改正,另外瞧甩,兩種協(xié)議終究哪個(gè)更好钉跷,你們說了算。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肚逸,一起剝皮案震驚了整個(gè)濱河市爷辙,隨后出現(xiàn)的幾起案子彬坏,更是在濱河造成了極大的恐慌,老刑警劉巖膝晾,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栓始,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡血当,警方通過查閱死者的電腦和手機(jī)幻赚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臊旭,“玉大人落恼,你說我怎么就攤上這事±胙” “怎么了佳谦?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)撤奸。 經(jīng)常有香客問我吠昭,道長(zhǎng),這世上最難降的妖魔是什么胧瓜? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任矢棚,我火速辦了婚禮,結(jié)果婚禮上府喳,老公的妹妹穿的比我還像新娘蒲肋。我一直安慰自己,他們只是感情好钝满,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布兜粘。 她就那樣靜靜地躺著,像睡著了一般弯蚜。 火紅的嫁衣襯著肌膚如雪孔轴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天碎捺,我揣著相機(jī)與錄音路鹰,去河邊找鬼。 笑死收厨,一個(gè)胖子當(dāng)著我的面吹牛晋柱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诵叁,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼雁竞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了拧额?” 一聲冷哼從身側(cè)響起碑诉,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤彪腔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后联贩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漫仆,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年泪幌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片署照。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祸泪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出建芙,到底是詐尸還是另有隱情没隘,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布禁荸,位于F島的核電站右蒲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赶熟。R本人自食惡果不足惜瑰妄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望映砖。 院中可真熱鬧间坐,春花似錦、人聲如沸邑退。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至莫矗,卻和暖如春飒硅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狡相。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留食磕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓彬伦,卻偏偏與公主長(zhǎng)得像伊诵,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子回官,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容