一、什么是http協議
HTTP是一個應用層協議,無狀態的,端口號為80。主要的版本有1.0/1.1/2.0.
- HTTP/1.* 一次請求-響應,建立一個連接,用完關閉;
- HTTP/1.1 串行化單線程處理,可以同時在同一個tcp鏈接上發送多個請求,但是只有響應是有順序的,只有上一個請求完成后,下一個才能響應。一旦有任務處理超時等,后續任務只能被阻塞(線頭阻塞);
- HTTP/2 並行執行。某任務耗時嚴重,不會影響到任務正常執行
二、什么是websocket
Websocket是html5提出的一個協議規范,是為解決客戶端與服務端實時通信。本質上是一個基於tcp,先通過HTTP/HTTPS協議發起一條特殊的http請求進行握手后創建一個用於交換數據的TCP連接。
WebSocket優勢: 瀏覽器和服務器只需要要做一個握手的動作,在建立連接之后,雙方可以在任意時刻,相互推送信息。同時,服務器與客戶端之間交換的頭信息很小。
三、什么是長連接、短連接
- 短連接:
連接->傳輸數據->關閉連接
HTTP是無狀態的,瀏覽器和服務器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。
也可以這樣說:短連接是指SOCKET連接后發送后接收完數據后馬上斷開連接。
- 長連接、
連接->傳輸數據->保持連接 -> 傳輸數據-> 。。。 ->關閉連接。
長連接指建立SOCKET連接后不管是否使用都保持連接,但安全性較差。
四、http和websocket的長連接區別
HTTP1.1通過使用Connection:keep-alive進行長連接,HTTP 1.1默認進行持久連接。在一次 TCP 連接中可以完成多個 HTTP 請求,但是對每個請求仍然要單獨發 header,Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。這種長連接是一種“偽鏈接”
websocket的長連接,是一個真的全雙工。長連接第一次tcp鏈路建立之后,后續數據可以雙方都進行發送,不需要發送請求頭。
keep-alive雙方並沒有建立正真的連接會話,服務端可以在任何一次請求完成后關閉。WebSocket 它本身就規定了是正真的、雙工的長連接,兩邊都必須要維持住連接的狀態。
參考鏈接:
1.http和socket之長連接和短連接區別 https://www.jianshu.com/p/b68d2b26f5f4