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 ...
随机推荐
- 第十四章 数字签名算法--RSA
注意:本节内容主要参考自 <Java加密与解密的艺术(第2版)>第9章“带密钥的消息摘要算法--数字签名算法” <大型分布式网站架构(设计与实践)>第3章“互联网安全架构” 1 ...
- Wannafly 挑战赛22 D 整数序列 线段树 区间更新,区间查询
题目链接:https://www.nowcoder.com/acm/contest/160/D 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K ...
- jquery.cookie.js中$.cookie() 使用方法
定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术: 下载与引入:jquery.cookie.js基于jquery:先引入jquery,再引入:jquery.coo ...
- substring()的用法和注意事项
作者原创:转载请注明出处 substring()方法的作用为截取字符串,其有两种用法: 分别如下: substring(int beginIndex);这个的作用为截取从beginindex位置处的元 ...
- 在django restful framework中设置django model的property
众所周知,在django的model中,可以某些字段设置@property和setter deleter getter,这样就可以在存入数据的时候进行一些操作,具体原理请参见廖雪峰大神的博客https ...
- Pro Git读书笔记 - 分支
Git 分支介绍. 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系统中,这是一个略微低效的过程--常常需要完全创 ...
- 用python生成器实现杨辉三角
先看杨辉三角的形态: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 上学的时候大多是用c语言的两层for循环在实现,现在我们尝试用生成器来实现. 先说思路:我 ...
- Cocos2d-x学习笔记(三)main方法
0. UNREFERENCED_PARAMETER(X)避免编译器关于未引用参数的警告. 下边代码用于屏蔽单个函数的警告: #pragma warning( push ) #pragma warnin ...
- javascript对象使用总结
javascript对象使用总结 一.总结 一句话总结:js对象的主要知识点是创建对象和继承,并且创建对象和继承的方法都是逐步层层递进的 创建对象 继承 原型 创建对象 1 <script> ...
- J2EE 与 Java EE
J2EE(Java 2 Enterprise Edition)和Java EE是一样的,由于J2EE的名称容易引起误解,Sun将J2EE更名为Java EE. 2005年6月,JavaOne大会召开, ...