取經之路 - 長連接和短鏈接
本質上是TCP的長連接和短鏈接
HTTP是一個應用層協議
TCP是一個傳輸層協議
IP是一個網絡層協議
TCP解決如何在IP層上可靠的傳輸數據
HTTP是一個無狀態的協議,對事務的處理沒有記憶能力
HTTP/1.0默認使用短鏈接
HTTP/1.1起默認使用長連接 通過請求頭設置: connection: keep-alive
長連接
- keep-alive保持一段時間的連接
- 詳解 keep-alive
主要爲服務器應用提供,服務器應用希望知道客戶主機是否崩潰,明確客戶是否可以使用資源。
如果客戶已經消失
使得服務器上保留一個半開放的連接,而服務器又在等待來自客戶端的數據,則服 務器將應遠等待客戶端的數據,保活功能就是試圖在服務 器端檢測到這種半開放 的連接。
如果一個給定的連接在兩小時內沒有任何的動作
則服務器就向客戶發一個探測報文段,客戶主機必須處於以下4個狀態之一:
客戶主機依然正常運行,並從服務器可達。
客戶的TCP響應正常,而服務器也知道對方是正常的,服務器在兩小時 後將保活定時器復位。
客戶主機已經崩潰,並且關閉或者正在重新啓動。
在任何一種情況下,客戶的TCP都沒有響應。服務端將不能收到對探測 的響應,並在75秒後超時。服務器總共發送10個這樣的探測 ,每個間 隔75秒。如果服務器沒有收到一個響應,它就認爲客戶主機已經關閉並 終止連接。
客戶主機崩潰並已經重新啓動。
服務器將收到一個對其保活探測的響應,這個響應是一個復位,使得服 務器終止這個連接。
客戶機正常運行,但是服務器不可達。
這種情況與2類似,TCP能發現的就是沒有收到探查的響應。
短鏈接
- 任務結束,連接斷開
- 短連接一般只會在 client/server間傳遞一次讀寫操作
- 優點:管理起來比較簡單,存在的連接都是有用的連接,不需要額外的控制手段
TCP三次握手建立連接
TCP四次揮手斷開連接
https://blog.csdn.net/printf123scanf/article/details/105095919
優缺點
-
可以省去較多的TCP建立和關閉的操作,減少浪費,節約時間
-
存活功能的探測週期太長
-
Client與server之間的連接如果一直不關閉的話,會存在一個問題,隨着客戶端連接越來越多,server早晚有扛不住的時候
-
管理較爲簡單
-
如果客戶請求頻繁,將在TCP的建立和關閉操作上浪費時間和帶寬
合適選擇使用
- 長連接多用於操作頻繁,點對點的通訊,而且連接數不能太多情況
- 像WEB網站的http服務一般都用短鏈接