2021-05-12 14:32:11
關於HTTP的長連線和短連線那些事
首先這裡簡單提及一下HTTP協定,HTTP協定是位於應用層物件導向的協定,現在WWW中使用的是HTTP/1.1版本,關於HTTP/1.0也是今天要說的內容。
HTTP1.1位元HTTP1.0相比而言,最大的區別就是增加了持久連線支援。
在HTTP/1.0中,預設使用的是短連線。即瀏覽器和伺服器每進行一次HTTP操作,就會建立一次連線,任務結束就斷開連線。當瀏覽器存取的某個HTML或其他型別的Web頁中包含有其他的Web資源(Js檔案、css檔案等),就會建立一個HTTP對談。
在HTTP/1.1起,預設使用長連線。用以保持連線特性。【長連線通常在響應頭會新增 Connection:keep-alive 】。使用長連線的情況下,當某個網頁開啟完畢之後,用戶端和伺服器之間的TCP連線不會關閉,如果用戶端再次存取該伺服器上的網頁,會使用上一次已經建立的連線。長連線不是永久保持連線,它有一個保持時間。實現長連線的前提是用戶端和伺服器端都需要支援長連線。
我們都知道,HTTP是基於TCP的應用層協定。HTTP的長連線和短連線,本質上是 TCP長連線和短連線。
基於TCP的協定,在資料通訊之前需要完成三次握手,結束通訊需要完成四次揮手。每次建立連線都是需要時間代價的。
1、短連線
模型:連線-----傳輸資料-----關閉連線
短連線是指三次握手建立連線之後,client向server傳送訊息,然後server回復client訊息,一次讀寫操作完成之後,發起斷開連線請求。一般情況下,close動作是由client發起的。
2、長連線
連線-----傳輸資料-----保持連線-----傳輸資料-----保持連線.....關閉連線
長連線指三次握手建立連線後,完成一次讀寫操作,一段時間內,該連線不會關閉,之後如果還有向該server發起的資料讀寫,仍然使用該該連線。這與之前提到的TCP通訊過程類似,因為要考慮在連線保持期間client始終處於正常狀態(防止server端儲存大量的半連線狀態的socket),這就要牽扯到之前的TCP維護的四個定時器中的保活暫存器。相對於短連線而言,長連線安全性一般。
3、長連線和短連線的特點
對於短連線而言,管理起來較為簡單,因為短連線存在的連線都是有效的,不需使用額外的方法來維護;帶來的缺點就是多次建立連線的請求,時間代價較大,佔用的頻寬也是一個很大的問題。
對於長連線,client端通常不會主動關閉連線,而是由伺服器決定的。因此server需要提供一套機制來管理這些保持的連線。如果client連線server之後,長時間沒有進行傳遞,大量的client連線會使server的負擔加重,因此server需要提供一種機制,用來關閉即使client處於正常狀態但長時間沒有進行資料通訊的連線,如果條件允許,可以在server端限制最大連線數,來避免個別用戶端對伺服器的拖累。
4、使用場合
長連線多用於操作頻繁,對等的通訊,且連線數不太多的情況。如資料庫的連線使用長連線。短連線要求每次資料處理之前,都需要建立連線,對於需要大量存取資料庫的操作,建立連線是對資源極大的浪費,而且容易導致socket錯誤。
短連線通常用於大型網站的存取。原因很簡單,成千上萬的client存取server,如果每個client保持一個連線,伺服器是難以負荷的。即使可以排程,代價也是很大的。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-04/142845.htm
相關文章