一、什么是http協(xié)議
HTTP是一個(gè)應(yīng)用層協(xié)議,無(wú)狀態(tài)的,端口號(hào)為80。主要的版本有1.0/1.1/2.0.
- HTTP/1.* 一次請(qǐng)求-響應(yīng),建立一個(gè)連接,用完關(guān)閉;
- HTTP/1.1 串行化單線程處理,可以同時(shí)在同一個(gè)tcp鏈接上發(fā)送多個(gè)請(qǐng)求,但是只有響應(yīng)是有順序的,只有上一個(gè)請(qǐng)求完成后,下一個(gè)才能響應(yīng)。一旦有任務(wù)處理超時(shí)等,后續(xù)任務(wù)只能被阻塞(線頭阻塞);
- HTTP/2 并行執(zhí)行。某任務(wù)耗時(shí)嚴(yán)重,不會(huì)影響到任務(wù)正常執(zhí)行
二、什么是websocket
Websocket是html5提出的一個(gè)協(xié)議規(guī)范,是為解決客戶端與服務(wù)端實(shí)時(shí)通信。本質(zhì)上是一個(gè)基于tcp,先通過(guò)HTTP/HTTPS協(xié)議發(fā)起一條特殊的http請(qǐng)求進(jìn)行握手后創(chuàng)建一個(gè)用于交換數(shù)據(jù)的TCP連接。
WebSocket優(yōu)勢(shì): 瀏覽器和服務(wù)器只需要要做一個(gè)握手的動(dòng)作,在建立連接之后,雙方可以在任意時(shí)刻,相互推送信息。同時(shí),服務(wù)器與客戶端之間交換的頭信息很小。
三、什么是長(zhǎng)連接、短連接
連接->傳輸數(shù)據(jù)->關(guān)閉連接
HTTP是無(wú)狀態(tài)的,瀏覽器和服務(wù)器每進(jìn)行一次HTTP操作,就建立一次連接,但任務(wù)結(jié)束就中斷連接。
也可以這樣說(shuō):短連接是指SOCKET連接后發(fā)送后接收完數(shù)據(jù)后馬上斷開連接。
連接->傳輸數(shù)據(jù)->保持連接 -> 傳輸數(shù)據(jù)-> 。。。 ->關(guān)閉連接。
長(zhǎng)連接指建立SOCKET連接后不管是否使用都保持連接,但安全性較差。
四、http和websocket的長(zhǎng)連接區(qū)別
HTTP1.1通過(guò)使用Connection:keep-alive進(jìn)行長(zhǎng)連接,HTTP 1.1默認(rèn)進(jìn)行持久連接。在一次 TCP 連接中可以完成多個(gè) HTTP 請(qǐng)求,但是對(duì)每個(gè)請(qǐng)求仍然要單獨(dú)發(fā) header,Keep-Alive不會(huì)永久保持連接,它有一個(gè)保持時(shí)間,可以在不同的服務(wù)器軟件(如Apache)中設(shè)定這個(gè)時(shí)間。這種長(zhǎng)連接是一種“偽鏈接”
websocket的長(zhǎng)連接,是一個(gè)真的全雙工。長(zhǎng)連接第一次tcp鏈路建立之后,后續(xù)數(shù)據(jù)可以雙方都進(jìn)行發(fā)送,不需要發(fā)送請(qǐng)求頭。
keep-alive雙方并沒(méi)有建立正真的連接會(huì)話,服務(wù)端可以在任何一次請(qǐng)求完成后關(guān)閉。WebSocket 它本身就規(guī)定了是正真的、雙工的長(zhǎng)連接,兩邊都必須要維持住連接的狀態(tài)。
參考鏈接:
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。