http连接重用

从一个主机向另外一个建立连接的过程时相当复杂的,而且包含了两个终端之间的很多包的交换,它是相当费时的。
连接握手的开销是很重要的,特别是对小量的HTTP报文。
如果打开的连接被重用来执行多次请求,那么就可以达到很高的数据吞吐量

持久性连接

http1.1强调的http连接默认情况可以被重用于多次请求
http1.0兼容的终端也可以使用相似的机制来明确的交流它们的偏好来保证连接处于活动状态,使用它来处理多个请求
http请求也可以保持空闲连接处于一段时间的活动状态,防止对相同目标主机的后续的请求。

保持连接活动的能力称为持久性连接
httpclient完全支持持久性连接

连接存活策略

HTTP规范没有规定一个持久连接应该存活多久,有些http服务器使用非标准的Keep-Alive头消息和客户端进行交互,服务器端会在数秒时间内保持连接。
HttpClient也会利用这个头消息,如果服务器返回的响应中没有包含Keep-Alive头消息,HttpClient会认为这个连接可以永远保持。
然后,很多服务器都会在不通知客户端的情况下,关闭一定时间内部活动的连接,来节省服务器资源。
在某些情况下默认的策略显得太乐观,我们可能需要自定义连接存活策略。

连接保持活跃策略

ConnectionKeepAliveStrategy myStrategy = new ConnectionKeepAliveStrategy() {
 public long getKeepAliveDuration(HttpResponse response ,HttpContext context){
    //honor 'keep-alive' header 兑现'keep-alive头部信息'
   HeaderElementIterator it = new  BasicHeaderElementIterator(response.headerIterator(HTTP.CONN_KEEP_ALIVE));
   while(it.hasNext()){
     HeaderElement he = it.nextElement();
     String param = he.getName();
     String value = he.getValue();
     if(value!=null && param.equalsIgnoreCase("timeout")){
       try{
           return Long.parseLong(value)*1000;
        }catch(NumberFormatException e){
           //转换错误
        }
    }
  }
   HttpHost host = (HttpHost) context.getAttribute(HttpClientContext.HTTP_TARGET_HOST);
   if("www.baidu.com".equalsIgnoreCase(target.getHostName())){
     // keep alive for 5 seconds only 只保持活动5秒
     return 5*1000;
  }else{
    // otherwise keep alive for 30 seconds 否则保持活动30秒
    return 30*1000;
  }
}
};
CloseableHttpClient client = HttpClients.custom()
                                      .setKeepAliveStrategy(myStrategy)
                                      .build();

httpclient 连接保持的更多相关文章

  1. Http持久连接与HttpClient连接池

    一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp socket连接,当交互完毕后会关闭这个连接. HTTP协议是全双工的协议, ...

  2. Http 持久连接与 HttpClient 连接池

    一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp socket连接,当交互完毕后会关闭这个连接. HTTP协议是全双工的协议, ...

  3. HttpClient连接池

    HttpClient连接池,发现对于高并发的请求,效率提升很大.虽然知道是因为建立了长连接,导致请求效率提升,但是对于内部的原理还是不太清楚.后来在网上看到了HTTP协议的发展史,里面提到了一个属性C ...

  4. httpClient 连接池问题出现403.9

    困扰了半个月时间终于找到连接池的问题,由于调用第三方有异常导致连接不能及时释放 所以写了一个定时扫描释放连接 监控连接池释放连接: public static class IdleConnection ...

  5. (五)HttpClient 连接超时及读取超时

    第一节: HttpClient 连接超时及读取超时 HttpClient连接超时及读取超时 httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间: HttpClient连接 ...

  6. HttpClient连接超时及读取超时

    HttpClient连接超时及读取超时 httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间: HttpClient连接时间 所谓连接的时候 是HttpClient发送请求 ...

  7. HttpClient连接池的一些思考

    前言 使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理.事实上,通过分析httpclien ...

  8. HttpClient实战三:Spring整合HttpClient连接池

    简介 在微服务架构或者REST API项目中,使用Spring管理Bean是很常见的,在项目中HttpClient使用的一种最常见方式就是:使用Spring容器XML配置方式代替Java编码方式进行H ...

  9. httpclient连接池在ES Restful API请求中的应用

    package com.wm.utils; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http ...

  10. springboot使用RestTemplate+httpclient连接池发送http消息

    简介 RestTemplate是spring支持的一个请求http rest服务的模板对象,性质上有点像jdbcTemplate RestTemplate底层还是使用的httpclient(org.a ...

随机推荐

  1. 设置控件如ImageButton可见与否

    继承view的控件有三种ui属性: 1.setVisibility(View.Gone); 不可见,不占有空间 2.setVisibility(View.VISIBLE); 可见 3.setVisib ...

  2. BZOJ1355: [Baltic2009]Radio Transmission KMP

    Description 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. Input 第一行给出字符串的长度,1 < L ≤ 1, ...

  3. chromedriver下载安装

    博主开发平台是win10,Python版本是3.6.最近需要用到chromedriver+selenium,下载好selenium后,pip install chromedriver,直接安装到pyt ...

  4. java自学入门心得体会 0.1

    之前记录了java的简介和基本语法 这里记载下对象和类 不太懂的我理解java对象和类的概念很模糊,因为有了 Abstract修饰符 让对象与类更加的扑朔迷离 - - 所以,就像很开放的语言,创建对象 ...

  5. IL and 堆于栈

    CIL的基本构成+CIL操作码速记表+CIL操作码大全速查 引用类型:引用类型存储在堆中.类型实例化的时候,会在堆中开辟一部分空间存储类的实例.类对象的引用还是存储在栈中. 值类型:值类型总是分配在它 ...

  6. List与数组的相互转换

    1.从string[]转List<string> string[] str={“1”,”2”}; List <string> list=new List<string&g ...

  7. c++ 指定长度容器元素的拷贝(copy_n)

    #include <iostream>     // cout #include <algorithm>    // copy #include <vector> ...

  8. [原][osg][osgEarth]关于在OE中使用物理引擎的调研

    关于物理引擎旋转的一些整理 参考文档 http://blog.wolfire.com/2010/03/Comparing-ODE-and-Bullet 介绍ODE和bullet的利弊 http://s ...

  9. 创意时钟 人形时钟 可惜不是 https

    ; (function () { $('#header').css({ 'position':'relative' }).prepend('<div id="clockWrap&quo ...

  10. bcompare Linux版 无限试用

    需要root权限.   # mv /usr/bin/bcompare /usr/bin/bcompare.real # cat /usr/bin/bcompare #!/bin/sh rm " ...