httpclient 连接路由
http路由
httpclient能够直接或通过路由建立连接到目标主机,这会涉及多个中间连接,也被称为跳。
Httpclient区分路由和普通连接,通道和分层。
通道连接到目标主机的多个中间代理的使用也被称为是代理链。
普通路由
连接直接连接到目标或仅通过一个代理来创建。
通道路由
通过代理链直接连接到目标来建立,没有代理的路由不是通道的,
分层路由
通过已存在的连接的分层协议来建立。协议仅仅可以在到目标的通道上火没有代理的直接连接上分层。
路由计算
RouteInfo接口代表关于最终涉及一个或多个中间步骤或跳目标主机路由的信息。
HttpRoute是RouteInfo的具体实现,这是不能改变的(不变的)。
HttpTraker是可变的RouteInfo的实现,有Httpclient在内部使用来跟踪到最大路由目标的剩余跳数。HttpTracker可以在成功执行项路由目标的下一跳之后更新。
HttpRouteDirector是一个帮助类,可以用来计算路由中的下一跳。这个类由HttpClient在内部使用
HttpRoutePlanner是一个代表计算到基于执行上下文到给定目标完成路由策略的接口。
HttpClient附带两个默认的HttpRoutePlanner实现。ProxySelectorRoutePlanner是基于java.NET.ProxySelector的。
默认情况下,它会从系统属性中或从运行应用程序的浏览器中选取JVM的代理设置。
DefaultHttpRoutePlanner实现即不使用任何java系统属性,也不使用系统或浏览器的代理设置,它只基于Http如下面描述的参数计算路由。
Http路由参数
http.route.default-proxy
定义可以被不使用JRE设置的默认路由规划者使用的代理主机。
这个参数期望得到一个HttpHost类型的值。
如果这个值没有被设置,那么就会尝试直接连接到目标。
http.route.local-address
定义一个本地地址有所有默认路由规划者来使用。
有多个网络接口的机器中,这个参数可以被用于从连接源中选择网络接口。
这个参数期望得到一个java.net.InetAddress类型的值。
如果这个参数参数没有被设置,将会自动使用本地地址
http.route.forced-route
定义了一个由所有默认路由规划者使用的强制路由。
代替了计算路由,给定的强制路由将会被返回,尽管指向一个完全不同的主机,这个参数期望得到一个httpRoute类型的值。
如果这个参数没有被设置,那么就使用默认的规则建立连接到目标服务器
httpclient 连接路由的更多相关文章
- httpClient 连接池问题出现403.9
困扰了半个月时间终于找到连接池的问题,由于调用第三方有异常导致连接不能及时释放 所以写了一个定时扫描释放连接 监控连接池释放连接: public static class IdleConnection ...
- (五)HttpClient 连接超时及读取超时
第一节: HttpClient 连接超时及读取超时 HttpClient连接超时及读取超时 httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间: HttpClient连接 ...
- HttpClient连接超时及读取超时
HttpClient连接超时及读取超时 httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间: HttpClient连接时间 所谓连接的时候 是HttpClient发送请求 ...
- HttpClient连接池的一些思考
前言 使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理.事实上,通过分析httpclien ...
- HttpClient连接池设置引发的一次雪崩
事件背景 我在凤巢团队独立搭建和运维的一个高流量的推广实况系统,是通过HttpClient 调用大搜的实况服务.最近经常出现Address already in use (Bind failed)的问 ...
- Http持久连接与HttpClient连接池
一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp socket连接,当交互完毕后会关闭这个连接. HTTP协议是全双工的协议, ...
- Http 持久连接与 HttpClient 连接池
一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp socket连接,当交互完毕后会关闭这个连接. HTTP协议是全双工的协议, ...
- HttpClient连接池
HttpClient连接池,发现对于高并发的请求,效率提升很大.虽然知道是因为建立了长连接,导致请求效率提升,但是对于内部的原理还是不太清楚.后来在网上看到了HTTP协议的发展史,里面提到了一个属性C ...
- HttpClient实战三:Spring整合HttpClient连接池
简介 在微服务架构或者REST API项目中,使用Spring管理Bean是很常见的,在项目中HttpClient使用的一种最常见方式就是:使用Spring容器XML配置方式代替Java编码方式进行H ...
随机推荐
- 20145329 《网络对抗技术》Web基础
实践目标 Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. Web前端javascipt 理解JavaScript的基本 ...
- noip2016普及组题解和心得
前言 感觉稍微有些滑稽吧,毕竟每次练的题都是提高组难度的,结果最后的主要任务是普及组抱一个一等奖回来.至于我的分数嘛..还是在你看完题解后写在[后记]里面.废话不多说,开始题解. (其实这篇博客只有题 ...
- libcurl开源库在Win32程序中使用下载文件显示进度条实例
一.配置工程引用libcurl库 #define CURL_STATICLIB #include "curl/curl.h" #ifdef _DEBUG #pragma comme ...
- Sass常用写法
Sass使用变量,变量以$开头 $bgcolor:#f40; background-color:$bgcolor; 如果变量需要嵌套在字符串当中,就需要写在#{}之中 $direction:left; ...
- Ubuntu 14.04 下解决maven访问速度慢问题
参考: maven国内镜像(maven下载慢的解决方法) maven中央仓库访问速度太慢的解决办法 Ubuntu 14.04 下解决maven访问速度慢问题 在启动OVX的时候,由于sh脚本中需要使用 ...
- Linux——进程管理学习简单笔记
基本概念: 进程和程序的区别 : 1.程序是静态概念,本身作为一种软件资源长期保存:而进程是程序的执行过程,它是动态概念,有一定的生命期,是动态产生和消亡的. 2.程序和进程无一一对应关系.一个程序可 ...
- c++ 在指定长度的数组或者容器中,统计元素出现的次数(count)
#include <iostream> // cout #include <algorithm> // count #include <vector> // vec ...
- Ubuntu14.04 server (amd64)修改源
1.备份原来的源文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2.修改源 sudo vi /etc/apt/sources.li ...
- Qt数据库_资料
1. QT笔记_数据库总结(一)-rojian-ChinaUnix博客.html http://blog.chinaunix.net/uid-28194872-id-3631462.html (里面有 ...
- Lua和C++交互 学习记录之一:C++嵌入脚本
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...