HTTP的長連接和短連接本質上是TCP長連接和短連接。HTTP屬於應用層協議.
短連接:瀏覽器和服務器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。
長連接:當一個網頁打開完成后,客戶端和服務器之間用於傳輸HTTP數據的 TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現長連接要客戶端和服務端都支持長連接。
TCP短連接:client向server發起連接請求,server接到請求,然后雙方建立連接。client向server發送消息,server回應client,然后一次讀寫就完成了,這時候雙方任何一個都可以發起close操作,不過一般都是client先發起 close操作。短連接一般只會在 client/server間傳遞一次讀寫操作
TCP長連接:client向server發起連接,server接受client連接,雙方建立連接。Client與server完成一次讀寫之后,它們之間的連接並不會主動關閉,后續的讀寫操作會繼續使用這個連接。
TCP的保活功能主要為服務器應用提供。如果客戶端已經消失而連接未斷開,則會使得服務器上保留一個半開放的連接,而服務器又在等待來自客戶端的數據,此時服務器將永遠等待客戶端的數據。保活功能就是試圖在服務端器端檢測到這種半開放的連接。
如果一個給定的連接在兩小時內沒有任何動作,服務器就向客戶發送一個探測報文段,根據客戶端主機響應探測4個客戶端狀態:
客戶主機依然正常運行,且服務器可達。此時客戶的TCP響應正常,服務器將保活定時器復位。
客戶主機已經崩潰,並且關閉或者正在重新啟動。上述情況下客戶端都不能響應TCP。服務端將無法收到客戶端對探測的響應。服務器總共發送10個這樣的探測,每個間隔75秒。若服務器沒有收到任何一個響應,它就認為客戶端已經關閉並終止連接。
客戶端崩潰並已經重新啟動。服務器將收到一個對其保活探測的響應,這個響應是一個復位,使得服務器終止這個連接。
客戶機正常運行,但是服務器不可達。這種情況與第二種狀態類似。
長連接和短連接的優點和缺點
由上可以看出,長連接可以省去較多的TCP建立和關閉的操作,減少浪費,節約時間。對於頻繁請求資源的客戶端適合使用長連接。在長連接的應用場景下,client端一般不會主動關閉連接,當client與server之間的連接一直不關閉,隨着客戶端連接越來越多,server會保持過多連接。這時候server端需要采取一些策略,如關閉一些長時間沒有請求發生的連接,這樣可以避免一些惡意連接導致server端服務受損;如果條件允許則可以限制每個客戶端的最大長連接數,這樣可以完全避免惡意的客戶端拖垮整體后端服務。
短連接對於服務器來說管理較為簡單,存在的連接都是有用的連接,不需要額外的控制手段。但如果客戶請求頻繁,將在TCP的建立和關閉操作上浪費較多時間和帶寬。
長連接和短連接的產生在於client和server采取的關閉策略。不同的應用場景適合采用不同的策略。
數據庫的連接用長連接, 如果用短連接頻繁的通信會造成socket錯誤,而且頻繁的socket 創建也是對資源的浪費。 而像WEB網站的http服務一般都用短鏈接,因為長連接對於服務端來說會耗費一定的資源
原文:https://blog.csdn.net/qq_35642036/article/details/82792038