http短連線(非持久連線)是指,客戶端和服務端進行一次http請求/響應之後,就關閉連線。所以,下一次的http請求/響應操作就需要重新建立連線。
http長連線(持久連線)是指,客戶端和服務端建立一次連線之後,可以在這條連線上進行多次請求/響應操作。持久連線可以設定過期時間,也可以不設定。
http/1.0 預設短連線,http/1.1起,缺省長連線
對於請求非常密集的 服務,在qps 特別高的時候,短連線 會存在瓶頸,top 的時候 會發現 httpserver 多執行緒分布在某幾個cpu上,但是 只有乙個cpu 的使用率比較高,其他都比較低,一直上不去。
pstack 發現,頻繁的 accept , 懷疑是使用了短連線,抓包發現是真的。
http的長連線和短連線本質上是tcp長連線和短連線。http屬於應用層協議,在傳輸層使用tcp協議,在網路層使用ip協議。ip協議主要解決網路路由和定址問題,tcp協議主要解決如何在ip層之上可靠的傳遞資料報,使在網路上的另一端收到發端發出的所有包,並且順序與發出順序一致。所以大量的 accept 以及 close 是可以在一定程度上證明使用的是短連線。
設定http短連線
在首部欄位中設定connection:close,則在一次請求/響應之後,就會關閉連線。
在首部欄位中設定connection:keep-alive 和keep-alive: timeout=60,表明連線建立之後,空閒時間超過60秒之後,就會失效。如果在空閒第58秒時,再次使用此連線,則連線仍然有效,使用完之後,重新計數,空閒60秒之後過期。
重點**connection欄位只有服務端設定才有效。
http操作是請求/響應成對出現的,即先有客戶端發出請求,後有服務端處理請求。所以,一次http操作的終點操作在服務端上,關閉也是由服務端發起的。
tcp保活功能,保活功能主要為伺服器應用提供,伺服器應用希望知道客戶主機是孩子啊,從而可以繼續獲取客戶使用資源。如果客戶已經消失,使得伺服器上保留乙個半開放的連線,而伺服器又在等待來自客戶端的資料,則伺服器將應遠等待客戶端的資料,保活功能就是試圖在服務 器端檢測到這種半開放的連線。
rpc比http請求快的原因
(1)http使用http協議,rpc使用tcp協議,比http少了應用層,表示層,會話層,這3層
(2)rpc使用長連線,當網路通訊使用tcp協議時,在真正的讀寫操作前,需要完成3次握手,來建立連線。當讀寫完成時,需要四次握手來釋放連線,每個連線的建立和釋放都是需要資源和時間的,所以長連線比短連線
更節省資源,效率更高
所謂長連線,就是要在客戶端與伺服器之間建立和保持穩定可靠的連線。其實它是一種很早就存在的技術,但是由於瀏覽器技術的發展比較緩慢,沒有為這種機制的實現提供很好的支援。所以要達到這種效果,需要客戶端和伺服器的程式共同配合來完成。通常的做法是,在伺服器的程式中加入乙個死迴圈,在迴圈中監測資料的變動。當發現新資料時,立即將其輸出給瀏覽器並斷開連線,瀏覽器在收到資料後,再次發起請求以進入下乙個週期,這就是常說的長輪詢(long-polling)。
Http 長連線 短連線 長輪詢 短輪詢
短連線 每次http請求都會建立tcp連線,管理容易 長連線 只需要建立一次tcp連線,以後http請求重複使用同乙個tcp連線,管理難 http1.1規定了預設保持長連線 http persistent connection 也有翻譯為持久連線 資料傳輸完成了保持tcp連線不斷開 不發rst包 不...
HTTP 長連線 短連線 長輪詢 短輪詢
http 1.0需要使用keep alive引數來告知伺服器端要建立乙個長連線,而http1.1預設支援長連線,http的長連線很容易在空閒後自動斷開,一般來說這個時間是300s左右。http是基於tcp ip協議的,建立乙個tcp連線是需要經過三次握手的,有一定的開銷,如果每次通訊都要重新建立連線...
HTTP 長連線 與 短連線
一,什麼是長連線 http1.1規定了預設保持長連線 http persistent connection 也有翻譯為持久連線 資料傳輸完成了保持tcp連線不斷開 不發rst包 不四次握手 等待在同網域名稱下繼續用這個通道傳輸資料 相反的就是短連線。http首部的connection keep al...