websocket和http區(qū)別

HTTP協(xié)議

HTTP是單向的,客戶(hù)端發(fā)送請(qǐng)求昔逗,服務(wù)器發(fā)送響應(yīng)。舉例來(lái)說(shuō)篷朵,當(dāng)客戶(hù)端向服務(wù)器發(fā)送請(qǐng)求時(shí)勾怒,該請(qǐng)求以HTTP或HTTPS的形式發(fā)送,在接收到請(qǐng)求后声旺,服務(wù)器會(huì)將響應(yīng)發(fā)送給客戶(hù)端笔链。每個(gè)請(qǐng)求都與一個(gè)對(duì)應(yīng)的響應(yīng)相關(guān)聯(lián),在發(fā)送響應(yīng)后客戶(hù)端與服務(wù)器的連接會(huì)被關(guān)閉腮猖。每個(gè)HTTP或HTTPS請(qǐng)求每次都會(huì)新建與服務(wù)器的連接鉴扫,并且在獲得響應(yīng)后,連接將自行終止缚够。 HTTP是在TCP之上運(yùn)行的無(wú)狀態(tài)協(xié)議幔妨,TCP是一種面向連接的協(xié)議,它使用三向握手方法保證數(shù)據(jù)包傳輸?shù)膫鬟f并重新傳輸丟失的數(shù)據(jù)包谍椅。

HTTP可以運(yùn)行在任何可靠的面向連接的協(xié)議(例如TCP误堡,SCTP)的上層。當(dāng)客戶(hù)端將HTTP請(qǐng)求發(fā)送到服務(wù)器時(shí)雏吭,客戶(hù)端和服務(wù)器之間將打開(kāi)TCP連接锁施,并且在收到響應(yīng)后,TCP連接將終止,每個(gè)HTTP請(qǐng)求都會(huì)建立單獨(dú)的TCP連接到服務(wù)器悉抵,例如如果客戶(hù)端向服務(wù)器發(fā)送10個(gè)請(qǐng)求肩狂,則將打開(kāi)10個(gè)單獨(dú)的HTTP連接。并在獲得響應(yīng)后關(guān)閉姥饰。

HTTP協(xié)議的長(zhǎng)連接和短連接傻谁,實(shí)質(zhì)上是TCP協(xié)議的長(zhǎng)連接和短連接。
每個(gè)HTTP連接完成后列粪,其對(duì)應(yīng)的TCP連接并不是每次都會(huì)關(guān)閉审磁。從 HTTP/1.1起,默認(rèn)使用長(zhǎng)連接岂座,用以保持連接特性态蒂。使用長(zhǎng)連接的HTTP協(xié)議,會(huì)在響應(yīng)頭有加入這個(gè)頭部字段:Connection:keep-alive
在使用長(zhǎng)連接的情況下费什,當(dāng)一個(gè)網(wǎng)頁(yè)打開(kāi)完成后钾恢,客戶(hù)端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,如果客戶(hù)端再次訪(fǎng)問(wèn)這個(gè)服務(wù)器上的網(wǎng)頁(yè)鸳址,會(huì)繼續(xù)使用這一條已經(jīng)建立的連接瘩蚪。Keep-Alive不會(huì)永久保持連接,它有一個(gè)保持時(shí)間氯质,可以在不同的服務(wù)器軟件(如Apache募舟,Nginx,Nginx中這個(gè)默認(rèn)時(shí)間是 75s)中設(shè)定這個(gè)時(shí)間闻察。實(shí)現(xiàn)長(zhǎng)連接要客戶(hù)端和服務(wù)端都支持長(zhǎng)連接。
HTTP屬于應(yīng)用層協(xié)議琢锋,在傳輸層使用TCP協(xié)議辕漂,在網(wǎng)絡(luò)層使用IP協(xié)議。IP協(xié)議主要解決網(wǎng)絡(luò)路由和尋址問(wèn)題吴超,TCP協(xié)議主要解決如何在IP層之上可靠的傳遞數(shù)據(jù)包钉嘹,使在網(wǎng)絡(luò)上的另一端收到發(fā)端發(fā)出的所有包,并且順序與發(fā)出順序一致鲸阻。TCP有可靠跋涣,面向連接的特點(diǎn)。

websocket協(xié)議

WebSocket是雙向的鸟悴,在客戶(hù)端-服務(wù)器通信的場(chǎng)景中使用的全雙工協(xié)議陈辱,與HTTP不同,它以ws://或wss://開(kāi)頭细诸。它是一個(gè)有狀態(tài)協(xié)議沛贪,這意味著客戶(hù)端和服務(wù)器之間的連接將保持活動(dòng)狀態(tài),直到被任何一方(客戶(hù)端或服務(wù)器)終止。在通過(guò)客戶(hù)端和服務(wù)器中的任何一方關(guān)閉連接之后利赋,連接將從兩端終止水评。

讓我們以客戶(hù)端-服務(wù)器通信為例,每當(dāng)我們啟動(dòng)客戶(hù)端和服務(wù)器之間的連接時(shí)媚送,客戶(hù)端-服務(wù)器進(jìn)行握手隨后創(chuàng)建一個(gè)新的連接中燥,該連接將保持活動(dòng)狀態(tài),直到被他們中的任何一方終止塘偎。建立連接并保持活動(dòng)狀態(tài)后褪那,客戶(hù)端和服務(wù)器將使用相同的連接通道進(jìn)行通信,直到連接終止式塌。

新建的連接被稱(chēng)為WebSocket博敬。一旦通信鏈接建立和連接打開(kāi)后,消息交換將以雙向模式進(jìn)行峰尝,客戶(hù)端-服務(wù)器之間的連接會(huì)持續(xù)存在偏窝。如果其中任何一方(客戶(hù)端服務(wù)器)宕掉或主動(dòng)關(guān)閉連接,則雙方均將關(guān)閉連接武学。套接字的工作方式與HTTP的工作方式略有不同祭往,狀態(tài)代碼101表示W(wǎng)ebSocket中的交換協(xié)議。

使用場(chǎng)景

  • 即時(shí)Web應(yīng)用程序:即時(shí)Web應(yīng)用程序使用一個(gè)Web套接字在客戶(hù)端顯示數(shù)據(jù)火窒,這些數(shù)據(jù)由后端服務(wù)器連續(xù)發(fā)送硼补。在WebSocket中,數(shù)據(jù)被連續(xù)推送/傳輸?shù)揭呀?jīng)打開(kāi)的同一連接中熏矿,這就是為什么WebSocket更快并提高了應(yīng)用程序性能的原因已骇。 例如在交易網(wǎng)站或比特幣交易中,這是最不穩(wěn)定的事情票编,它用于顯示價(jià)格波動(dòng)褪储,數(shù)據(jù)被后端服務(wù)器使用Web套接字通道連續(xù)推送到客戶(hù)端。
  • 游戲應(yīng)用程序:在游戲應(yīng)用程序中慧域,你可能會(huì)注意到鲤竹,服務(wù)器會(huì)持續(xù)接收數(shù)據(jù),而不會(huì)刷新用戶(hù)界面昔榴。屏幕上的用戶(hù)界面會(huì)自動(dòng)刷新辛藻,而且不需要建立新的連接,因此在WebSocket游戲應(yīng)用程序中非常有幫助互订。
  • 聊天應(yīng)用程序:聊天應(yīng)用程序僅使用WebSocket建立一次連接吱肌,便能在訂閱戶(hù)之間交換,發(fā)布和廣播消息屁奏。它重復(fù)使用相同的WebSocket連接岩榆,用于發(fā)送和接收消息以及一對(duì)一的消息傳輸。

總結(jié)

Websocket是伴隨著HTML5規(guī)范而出的一種新的協(xié)議,嚴(yán)格意義上來(lái)說(shuō)與HTTP協(xié)議沒(méi)有關(guān)系,但是卻需要依賴(lài)于HTTP協(xié)議建立與服務(wù)器端的連接,一旦建立了連接,便不再與HTTP協(xié)議產(chǎn)生關(guān)系。由于HTTP是不支持全雙工通信的,而Websocket正好彌補(bǔ)了HTTP協(xié)議的不足同時(shí)也能夠更好地兼容目前的瀏覽器和成熟的HTTP通信協(xié)議勇边。Websocket與HTTP有交集,但是并不是全部犹撒。而當(dāng)連接建立過(guò)后的通信過(guò)程,不再與HTTP協(xié)議有任何的關(guān)系。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粒褒,一起剝皮案震驚了整個(gè)濱河市识颊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奕坟,老刑警劉巖祥款,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異月杉,居然都是意外死亡刃跛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)苛萎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桨昙,“玉大人,你說(shuō)我怎么就攤上這事腌歉⊥芾遥” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵翘盖,是天一觀的道長(zhǎng)桂塞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)馍驯,這世上最難降的妖魔是什么阁危? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮泥彤,結(jié)果婚禮上欲芹,老公的妹妹穿的比我還像新娘。我一直安慰自己吟吝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布颈娜。 她就那樣靜靜地躺著剑逃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪官辽。 梳的紋絲不亂的頭發(fā)上蛹磺,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音同仆,去河邊找鬼萤捆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俗或。 我是一名探鬼主播市怎,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辛慰!你這毒婦竟也來(lái)了区匠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤帅腌,失蹤者是張志新(化名)和其女友劉穎驰弄,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體速客,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡戚篙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溺职。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岔擂。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辅愿,靈堂內(nèi)的尸體忽然破棺而出智亮,到底是詐尸還是另有隱情,我是刑警寧澤点待,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布阔蛉,位于F島的核電站,受9級(jí)特大地震影響癞埠,放射性物質(zhì)發(fā)生泄漏状原。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一苗踪、第九天 我趴在偏房一處隱蔽的房頂上張望颠区。 院中可真熱鬧,春花似錦通铲、人聲如沸毕莱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)朋截。三九已至,卻和暖如春吧黄,著一層夾襖步出監(jiān)牢的瞬間部服,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工拗慨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留廓八,地道東北人奉芦。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像剧蹂,于是被迫代替她去往敵國(guó)和親声功。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

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