APP應用 HTTP/1.0中keep-alive

?

在HTTP/1.0中keep-alive不是標準協議,客戶端必須發送Connection:Keep-Alive來激活keep-alive連接。
https://www.imooc.com/article/31231
? HTTP協議是無狀態的協議,即每一次請求都是互相獨立的。因此它的最初實現是,每一個http請求都會打開一個tcp socket連接,當交互完畢后會關閉這個連接。
? HTTP協議是全雙工的協議,所以建立連接與斷開連接是要經過三次握手與四次揮手的。顯然在這種設計中,每次發送Http請求都會消耗很多的額外資源,即連接的建立與銷毀。
? 于是,HTTP協議的也進行了發展,通過持久連接的方法來進行socket連接復用。

?

從圖中可以看到:
  1. 在串行連接中,每次交互都要打開關閉連接
  2. 在持久連接中,第一次交互會打開連接,交互結束后連接并不關閉,下次交互就省去了建立連接的過程。
? 持久連接的實現有兩種:HTTP/1.0+的keep-alive與HTTP/1.1的持久連接。
? HTTP/1.1的連接默認情況下都是持久連接。如果要顯式關閉,需要在報文中加上Connection:Close首部。不發送Connection:Close不意味著服務器承諾連接永遠保持打開。即在HTTP/1.1中,所有的連接都進行了復用。
HttpClien中使用了連接池來管理持有連接,同一條TCP鏈路上,連接是可以復用的。HttpClient通過連接池的方式進行連接持久化。
? 其實“池”技術是一種通用的設計,其設計思想并不復雜:
  1. 當有連接第一次使用的時候建立連接
  2. 結束時對應連接不關閉,歸還到池中
  3. 下次同個目的的連接可從池中獲取一個可用連接
  4. 定期清理過期連接 如下:
在HttpClient4.4版本之前,在從連接池中獲取重用連接的時候會檢查下是否過期,過期則清理。
之后的版本則不同,會有一個單獨的線程來掃描連接池中的連接,發現有離最近一次使用超過設置的時間后,就會清理。默認的超時時間是2秒鐘。
總結
  • HTTP協議通過持久連接的方式,減輕了早期設計中的過多連接問題
  • 持久連接有兩種方式:HTTP/1.0+的Keep-Avlive與HTTP/1.1的默認持久連接
  • HttpClient通過連接池來管理持久連接,連接池分為兩個,一個是總連接池,一個是每個route對應的連接池
  • 默認連接重用策略與HTTP協議約束一致,根據response先判斷Connection:Close則關閉,在判斷Connection:Keep-Alive則開啟,最后版本大于1.0則開啟
  • 只有在HttpClientBuilder中手動開啟了清理過期與空閑連接的開關后,才會清理連接池中的連接
  • HttpClient4.4之后的版本通過一個死循環線程清理過期與空閑連接,該線程每次執行都sleep一會,以達到定期執行的效果

轉載于:https://www.cnblogs.com/ww-xiaowei/p/10059197.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395844.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395844.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395844.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql 日期滯后_如何滯后MySQL中的列?

要在MySQL中滯后一列,首先讓我們創建一個表。創建表的查詢如下-mysql> create table LagDemo-> (-> UserId int,-> UserValue int-> );示例使用insert命令在表中插入一些記錄。查詢如下-mysql> insert into LagDemo values(12,158);mysql> ins…

oracle高效分頁查詢總結

本文參考鏈接:http://blog.sina.com.cn/s/blog_8604ca230100vro9.html 探索查詢語句: --分頁參數:size 20 page 2 --沒有order by的查詢 -- 嵌套子查詢,兩次篩選(推薦使用) --SELECT * -- FROM (SELECT R…

18124 N皇后問題

18124 N皇后問題 時間限制:2000MS 內存限制:65535K提交次數:0 通過次數:0 題型: 編程題 語言: G;GCC;VC Description 有N*N的國際象棋棋盤,要求在上面放N個皇后,要求任意兩個皇后不會互殺,有多少種不同的放法? 輸入格式 每一個…

ux設計師怎樣找同類產品_沒有預算? 別找借口。 便宜的UX上的UX 2:讓我們開始構建。...

ux設計師怎樣找同類產品by Vinny文尼 沒有預算? 別找借口。 便宜的UX上的UX 2:讓我們開始構建。 (No budget? No excuse. UX on the cheap Part 2: let’s get building.) This is a continuation of my series on ‘UX on a Budget’. If you haven’…

巨蟒python全棧開發-第6天 is==

1.小數據池 2.id 3.decode和encode 小數據池 #小數據池:不要死磕就行#python為了簡化,搞出來的一個東西ID (1)# id()函數可以幫我們查看一個變量的內存地址# a10# b30# c10# print(id(a)) #1712876864# print(id(b)) #1712877504# print(id(c)) #1712876864(2)# lst[周…

安裝mysql8._安裝MySQL8(附詳細圖文)

安裝MySQL8(附詳細圖文)刪除mysql服務:mysqld -remove mysql1、下載 mysql 8下載地址:https://dev.mysql.com/downloads/mysql/2、配置 mysql 配置文件打開 mysql 8 的安裝目錄:my.ini注意設置自己對應的 mysql 安裝目錄 和數據存放目錄[mysq…

win10安裝windows live writer 錯誤:OnCatalogResult:0x80190194

到官網下載了一個在線安裝程序,可是一運行就提示無法安裝,顯式錯誤“OnCatalogResult:0x80190194”,如下圖所示 找到windows live安裝程序的安裝日志文件。具體位置是:C:\Users\All Users\Microsoft\WLSetup\Logs 需要下載安裝文件…

C# 實現一個可取消的多線程操作 示例

private void button1_Click(object sender, EventArgs e){//定義一個為可取消資源標志CancellationTokenSource cts new CancellationTokenSource();//定義二個為可取消資源標志CancellationTokenSource cts1 new CancellationTokenSource();//實現一個可取消操作的回調函數…

這些工具將提高您的Android生產率

by Michal Bialas由Michal Bialas 這些工具將提高您的Android生產率 (These tools will boost your Android productivity) The main purpose of this post is to list and describe tools (mainly free ones), which allow you to boost your productivity, efficiency, and …

python四位玫瑰數的解題思路_入門python知識點總結以及15道題的解題思路分析

知識點總結python1、序列app操做符idex in s 若是x是列表s的元素,返回True,不然Falses t 鏈接兩個序列s和ts*n或者n*s 將序列s復制n次s[i] 返回s中第i元素s[i:j]或s[i:j: k] 切片,返回序列s中第i到j-1以k為步長的元素子序列函數函數len(s) 返…

TZOJ--5480: 孤衾易暖 // POJ--3735 Training little cats (矩陣快速冪)

5480: 孤衾易暖 時間限制(普通/Java):1000MS/3000MS 內存限制:65536KByte 描述 哇,好難,我要放棄了(扶我起來,我還能A 寒夜縱長,孤衾易暖,鐘鼓漸清圓。 生活也許有些不如意的地方,但是沒有什么是擁有一…

IntelliJ IDEA2017 修改緩存文件的路徑

IDEA的緩存文件夾.IntelliJIdea2017.1,存放著IDEA的破解密碼,各個項目的緩存,默認是在C盤的用戶目錄下,目前有1.5G大小。現在想要把它從C盤移出。 在IDEA的安裝路徑下中,進入bin目錄后找到屬性文件:idea.pr…

解決iphone填寫表單時,表單項獲取焦點時往下拉屏,導致頂部標題欄下滑錯位...

$(function () {//解決iphone填寫表單時,表單項獲取焦點時往下拉屏,導致頂部標題欄下滑錯位var u navigator.userAgent;var isiOS !!u.match(/\(i[^;];( U;)? CPU.Mac OS X/); //ios終端if (isiOS true) {var pageHeight window.innerHeight;$(&quo…

aws cognito_AWS Cognito的用戶管理—(2/3)核心功能

aws cognitoby Kangze Huang黃康澤 AWS Cognito的用戶管理—(2/3)核心功能 (User Management with AWS Cognito — (2/3) The Core Functionality) 完整的AWS Web樣板-教程1B (The Complete AWS Web Boilerplate — Tutorial 1B) Main Table of Contents Click Here主要目錄請…

python字符串后面添加字符串_什么是字符串?怎樣在Python中添加字符串?

字符串是一種表示文本的數據類型,字符串中的字符可以是ASCII字符、各種符號以及各種Unicode字符。Python中的字符串有如下三種表現方式。第1種方式:使用單引號包含字符。示例代碼如下:a 123注意,單引號表示的字符串里不能包含單引…

surround360

1.讀入配置文件2.創建底部和頂部投影線程3.將側面圖投影到球座標(1)load側面相機圖像(2)創建投影線程(3)等待線程結束4.渲染立體全景圖(側邊)(1)計算重疊區域寬度(2)創建準備生成新視圖的線程: 送入相鄰兩個相機的投影圖,計算光流flowLtoR,flowRtoL, 保存在novelViewGenerators…

snapchat_我剛剛在Snapchat獲得開發人員職位。

snapchatby Jon Deng喬恩鄧 我剛剛在Snapchat獲得開發人員職位。 這是我學到的東西,以及它如何幫助您進行求職。 (I just got a developer job at Snapchat. Here’s what I learned and how it can help you with your job search.) About a year ago, while depl…

sys.argv

import sysi0 print len(sys.argv) while i < len(sys.argv):print sys.argv[%d]:%s %(i,sys.argv[i])i i1 import sysprint len(sys.argv) for i in range(len(sys.argv)):print sys.argv[%d]:%s %(i,sys.argv[i]) 執行 結果 &#xff1a;E:\MyScript>python sysargs.py…

Docker安裝java-Zookeeper進行操作

Docker安裝Zookeeper下載Zookeeper鏡像 docker pull zookeeper啟動容器并添加映射 docker run --privilegedtrue -d --name zookeeper --publish 2181:2181 -d zookeeper:latest 查看容器是否啟動 docker ps idea提供了一個Zookeeper插件&#xff0c;以供連接Zookeeper服務中心…

java反射獲取注解_Java自定義注解和運行時靠反射獲取注解

java自定義注解Java注解是附加在代碼中的一些元信息&#xff0c;用于一些工具在編譯、運行時進行解析和使用&#xff0c;起到說明、配置的功能。注解不會也不能影響代碼的實際邏輯&#xff0c;僅僅起到輔助性的作用。包含在 java.lang.annotation 包中。1、元注解元注解是指注解…