tcp連線當網路通訊時採用tcp協議時,在真正的讀寫操作之前,客戶端與伺服器端之間必須建立乙個連線,當讀寫操作完成後,雙方不再需要這個連線時可以釋放這個連線。連線的建立依靠「三次握手」,而釋放則需要「四次揮手」,所以每個連線的建立都會帶來資源和時間開銷。
http協議的長連線和短連線,實質上是tcp協議的長連線和短連線。tcp連線是乙個雙向的通道,可以保持一段時間不關閉,因此tcp連線才有真正的長連線和短連線這一說。
短連線就是客戶端和伺服器每進行一次http操作,就建立一次連線,任務結束就中斷連線。在使用長連線的情況下,當乙個網頁開啟完成後,客戶端和伺服器之間用於傳輸http資料的tcp連線不會關閉,客戶端再次訪問這個伺服器時,會復用同乙個 tcp 通道,直到客戶端心跳檢測失敗或伺服器連線超時。
長連線過程如下:
連線->傳輸資料->保持連線 -> 傳輸資料-> ... ->關閉連線。
短連線如下:
連線->傳輸資料->關閉連線
簡而言之,若沒有資料傳輸也要保持tcp連線,就是長連線,反之就是短連線。舉個簡單的例子,幼兒園老師和小朋友是長連線,老師需要時不時地關注有沒有小朋友出意外;而大學老師和學生就是短連線,散養即可。
長連線多用於操作頻繁,點對點的通訊,而且連線數不能太多情況。每個tcp連線都需要三步握手,這需要時間,如果每個操作都是先連線,再操作的話那麼處理速度會降低很多,所以每個操作完後都不斷開,下次處理時直接傳送資料報就ok了,無需重新建立tcp連線。例如:資料庫的連線用長連線, 如果用短連線頻繁的通訊會造成socket錯誤,而且頻繁的socket 建立也是對資源的浪費。
而像web**這麼頻繁的成千上萬甚至上億客戶端的連線用短連線會更省一些資源。如果用長連線,而且同時有成千上萬的使用者,那麼每個使用者都占用乙個連線的話,結果可想而知;故在併發量大,但每個使用者無需頻繁操作的場景下,推薦使用短連線。
http/1.0預設使用短連線,而從http/1.1起,預設使用長連線,用以復用tcp連線,多個http請求可以復用同乙個tcp連線,從而降低tcp連線建立和斷開的消耗。使用長連線的http協議,會在請求頭或者響應頭header中加入這行**:
connection:keep-alive
實現長連線需要客戶端和服務端都支援長連線,客戶端可以通過設定 http headerconnection: close
來關閉長連線。不論request還是response的header,只要包含了值為close的connection,都表明當前正在使用的tcp連線在本次請求處理完畢後會被斷掉。以後客戶端再進行請求時,就必須建立新的tcp連線。
客戶端的長連線不會永久保持連線,它有乙個超時時間的概念,可以在header當中進行設定的。譬如:
圖中的keep-alive: timeout=20表示這個tcp通道可以保持20秒。另外,還可能有max=***,表示這個長連線最多接收***次請求就斷開。對於客戶端來說,如果伺服器沒有告訴客戶端超時時間也沒關係,服務端可主動發起四次握手斷開tcp連線,客戶端能夠知道該tcp連線已經無效;另外tcp還有心跳包來檢測當前連線是否還活著,方法很多,避免浪費資源。
http協議 長連線和短連線
通過http協議進行資料傳輸的前提是建立tcp連線,乙個tcp連線的建立需要三次握手過程,在乙個tcp連線上可以進行客戶端與伺服器之間的http通訊 在http 1.x的版本中,乙個tcp連線中的http通訊是有順序的,只有前乙個http通訊完成後,後面的http通訊才可以接著進行,故在乙個服務中要...
HTTP 長連線和短連線
1.http協議與tcp ip協議的關係 http的長連線和短連線本質上是tcp長連線和短連線。http屬於應用層協議,在傳輸層使用tcp協議,在網路層使用ip協議。ip協議主要解決網路路由和定址問題,tcp協議主要解決如何在ip層之上可靠的傳遞資料報,使在網路上的另一端收到發端發出的所有包,並且順...
http 長連線 短連線
http短連線 非持久連線 是指,客戶端和服務端進行一次http請求 響應之後,就關閉連線。所以,下一次的http請求 響應操作就需要重新建立連線。http長連線 持久連線 是指,客戶端和服務端建立一次連線之後,可以在這條連線上進行多次請求 響應操作。持久連線可以設定過期時間,也可以不設定。http...