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.mzph.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、元注解元注解是指注解…