短連接
連接->傳輸數據->關閉連接
比如HTTP是無狀態的的短鏈接,瀏覽器和服務器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。
具體就是 瀏覽器client發起並建立TCP連接 -> client發送HttpRequest報文 -> server接收到報文->server handle並發送HttpResponse報文給前端,發送完畢之后立即調用socket.close方法->client接收response報文->client最終會收到server端斷開TCP連接的信號->client 端斷開TCP連接,具體就是調用close方法。
也可以這樣說:短連接是指SOCKET連接后,發送接收完數據后馬上斷開連接。 因為連接后接收了數據就斷開了,所以每次數據接受處理不會有聯系。 這也是HTTP協議無狀態的原因之一。
長連接
連接->傳輸數據->保持連接 -> 傳輸數據-> ………..->直到一方關閉連接,多是客戶端關閉連接。 長連接指建立SOCKET連接后不管是否使用都保持連接,但安全性較差。HTTP在短鏈接和長連接上的選擇:HTTP是無狀態的 ,也就是說,瀏覽器和服務器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。如果客戶端瀏覽器訪問的某個HTML或其他類型的 Web頁中包含有其他的Web資源,如JavaScript文件、圖像文件、CSS文件等;當瀏覽器每遇到這樣一個Web資源,就會建立一個HTTP會話
HTTP1.1和HTTP1.0相比較而言,最大的區別就是增加了持久連接支持(貌似最新的HTTP1.1 可以顯示的指定 keep-alive),但還是無狀態的,或者說是不可以信任的。
如果瀏覽器或者服務器在其頭信息加入了這行代碼 Connection:keep-alive TCP連接在發送后將仍然保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了為每個請求建立新連接所需的時間,還節約了帶寬。
實現長連接要客戶端和服務端都支持長連接。
優缺點
tcp長連接優缺點:長連接可以省去較多的tcp建立/關閉的操作,減少浪費,節省時間,對於頻繁請求資源的客戶,較適用於長連接;client和server如果長時間不關閉的話,會存在一個問題,隨着客戶的越來越多,server早晚會有扛不住的一天,這時需要采取一些策略,如關閉一些長時間不讀寫操作的連接,這樣可以避免一些惡意連接導致server端服務受損,如果條件再允許,就可以以客戶端為顆粒度,限制每個客戶端的最大連接數
tcp短連接優缺點:短連接對於服務器來說較為簡單,存在的連接都是有用的連接,不需要額外的控制,但如果客戶端連接頻繁,會在tcp的建立和關閉上浪費時間。
原文鏈接:https://blog.csdn.net/qq_38270106/article/details/83539289