關於keep alive的幾點疑惑

2021-08-11 12:51:36 字數 1089 閱讀 2872

在一次tcp連線中可以連續傳送多次資料,即可以保持一段時間的tcp連線,在這個保持的通道上有多個request、多個response。而不用每發一次資料就要重新進行三次握手連線,發完一次資料就要立即進行四次揮手釋放連線。 這樣可以提高效能和吞吐率。

tcp keep-alive:

為了檢測tcp的連線狀況。經過設定的時間之後,伺服器會發出檢測包去確認tcp連線是否還在。如果出現了問題就關閉連線。

小結:http的keep-alive和tcp的keep-alive是完全不同的東西。

在http1.1版本之後都會預設設定connection為keep-alive,如果想要關閉這條設定,需要在頭資訊中更改connection為close。

但是在實際使用中,http頭部有了keep-alive這個值並不代表一定會使用長連線,客戶端和伺服器端都可以無視這個值,每一條tcp通道,只有一次get,get完之後,立即有tcp關閉的四次握手,這樣寫**更簡單。這時候雖然http頭有connection: keep-alive,但不能說是長連線。所以是否用了長連線,還是得用抓包工具分析tcp流。

小結:正常情況下客戶端瀏覽器、web服務端都有實現這個標準,因為它們的檔案又小又多,保持長連線減少重新開tcp連線的開銷很有價值。但是最終到底有沒有實現keep-alive還是得看tcp流的情況。

http keep-alive只是一種為了達到復用tcp連線的「協商」行為,雙方並沒有建立正真的連線會話,服務端也可以不認可,也可以隨時(在任何一次請求完成後)關閉掉。它是指在一次 tcp 連線中完成多個 http請求,但是對每個請求仍然要單獨發 header,所以除了真正的資料部分外,伺服器和客戶端還要大量交換http header,資訊交換效率很低,這樣建立的「長連線」都是偽長連線。

websocket:

websocket不同,它本身就規定了是正真的、雙工的長連線,兩邊都必須要維持住連線的狀態。

小結:http協議決定了瀏覽器端總是主動發起方,http的服務端總是被動的接受、響應請求。http提供的長連線伺服器可以不接受。而websocket協議,在連線之後,客戶端、服務端是完全平等的。websocket是真正的長連線。

關於css的幾點

花了兩個星期,我看完了 精通css 高階web標準解決方案 第2版 看完了這本書我學到了很多。1 是關於背景定位的 使用畫素設定背景定位和使用百分數進行背景定位是不一樣的,如果使用畫素設定背景定位,那麼影象左上角到元素左上角的距離為指定的畫素值。而百分數定位並不對背景影象的左上角進行定位,而是使用影...

ios關於retainCount的一些疑問

main.m檔案裡 void test1 student stu void test2 student stu int main int argc,const char argv return 0 執行結果是這樣的 2016 01 24 22 29 01.563 oc5記憶體管理 501 22465...

關於做事的幾點感想

關於做事的幾點感想 作者 li xianjing 2006 12 19 今天晚上,老總召開會議討論軟體部和硬體部溝通的問題。因此讓我破天荒的加了一次班,一些問題也是我比較關注的,儘管只是坐在角落裡靜靜的聽,也有不少感想。1.做個現實主義者而不是完美主義者。為了乙個小問題討論很長時間,原因是無法為它找...