python 高階程式設計 06 長連線 連線池

2022-04-10 12:43:50 字數 1496 閱讀 3481

我們都知道tcp是基於連線的協議,其實這個連線只是乙個邏輯上面的概念,在ip層來看,tcp和udp僅僅是內容上稍有差別而已。

tcp 的連線僅僅是連線兩端對於四元組和sequence號的一種約定而已

四元組:源ip 目的ip 源端 目的埠

五元組 :源ip 目的ip 源端 目的埠 協議

七元祖:源ip 目的ip 源端 目的埠 協議 服務型別 介面索引

在效能比較敏感的程式中,為了節省tcp網路呼叫建立連線三次握手的時間,很多程式都會採用復用之前已經建立過的連線方式來優化

在加上往往是  「請求 響應 請求 響應」的模式 單個連線限制了qps的提公升 所以會採取開啟多個連線組 組成乙個'池子'的方式來優化效能,

我們稱之為"連線池「

http的長連線

及http持久連線,也稱作 http keep-alive 是使用同乙個tcp連線來傳送和接受多個http請求/應答,而不是為每乙個新的請求都新建乙個連線

如果瀏覽器支援keep-alive 它會在包頭連線

connection:keep-alive

當伺服器收到請求,做出回應的時候 它也會在新增這個到響應中 

這樣做的話 連線就不會中斷,而是保持連線 當客戶端傳送另乙個請求,它會使用同乙個連線 這樣持續到客戶端或伺服器端認為回話結束,其中一方斷開

在http 1.1 中所有的連線預設都是持續連線,除非特殊宣告不支援。http持久連線不使用獨立的keepalive資訊 而是僅僅允許多個請求使用單個連線、

然而 apache2.0 httpd的預設連線過期時間是僅僅的15s 對於apache 2.2 只要5s 短過期時間的優先是能夠快速的傳輸多個web頁最賤

而不會繫結多個伺服器程序或執行緒太長時間。

keep-alive

*較少的cpu和記憶體

*允許請求和應答的http管線化

* 減少了後續請求的延遲(無需再進行握手)

* 報告錯誤無需關閉tcp連線

對於現在的廣泛普及的頻寬連線來說 keep-alive也許並不像以前一樣有用,web伺服器會保持若干秒的連線

這與提高的效能相比也許會影響效能,對於單個檔案被不斷請求的服務(如靜態檔案**)keep-alive可能會極大的

影響效能,因為它在檔案被請求的之後還保持了不必要的連線很長時間

根據rfc2616 使用者客戶端與任何伺服器和**伺服器之間不應該維持超過2個連線,**伺服器應該最多是用2*n個持久連線打其他伺服器,

或者**伺服器。其中n是同事活躍的使用者數。

這個旨在提高http響應時間並且避免阻塞

但由於tcp連線減少了 對於靜態資源較多的** 效能反而可能會下降。

動靜分離-- 

從而保證主站的動態資源請求和靜態資源請求不會相互擁擠占用資源、

而且還會有個乙個額外的好吃

對於靜態資源的請求,http請求頭里的cookie等資訊是沒有用處的。反而占用了寶貴的上行網路資源,用獨立的網域名稱存放靜態資源後,請求

靜態資源網域名稱就不會預設帶上主站網的cookie。從而解決了這個問題。

06python基礎高階之網路程式設計

一.ip位址 ip是可聯網裝置在網路中的邏輯位址,在同一網路中是唯一的 用來在網路中標記某個裝置 ifconfig ipconfig檢視網絡卡資訊 192.168.私有ip 127.0.0.1 環迴位址 本機ip位址 二.埠 port 1 作用 埠是傳輸資料的通道,好比教室的門,是資料傳輸必經之路 ...

Python高階06 迴圈物件

通過上面一講,我們再次熟悉了python裡的迴圈控制。現在,我們將接觸迴圈物件 iterable object 這一講的主要目的是為了大家在讀python程式的時候對迴圈物件有乙個基本概念。迴圈物件的並不是隨著python的誕生就存在的,但它的發展迅速,特別是python 3x的時代,從zip 或者...

Python高階06 迴圈物件

這一講的主要目的是為了大家在讀python程式的時候對迴圈物件有乙個基本概念。迴圈物件的並不是隨著python的誕生就存在的,但它的發展迅速,特別是python 3x的時代,迴圈物件正在成為迴圈的標準形式。什麼是迴圈物件 迴圈物件是這樣乙個物件,它包含有乙個next 方法 next 方法,在pyth...