HttpComponents 之客户端连接池

1.配置参数

org.apache.http.impl.conn.PoolingHttpClientConnectionManager

类。用于管理httpClient连接池。调用默认构造函数即可得到。

org.apache.http.impl.conn.PoolingHttpClientConnectionManager.setMaxTotal(int max)

设置最大的连接数,即tcp连接数。

 void org.apache.http.impl.conn.PoolingHttpClientConnectionManager.setDefaultMaxPerRoute(int max)

设置每个路由的默认最大连接数。默认为2。也就是说你连qq.com:80的tcp个数最多为2。

void org.apache.http.impl.conn.PoolingHttpClientConnectionManager.setMaxPerRoute(HttpRoute route, int max)

设置指定路由的最大连接数。

2.拿到httpClient

HttpClientBuilder org.apache.http.impl.client.HttpClients.custom()

拿到HttpClientBuilder 。

HttpClientBuilder org.apache.http.impl.client.HttpClientBuilder.setConnectionManager(HttpClientConnectionManager connManager)

将PoolingHttpClientConnectionManager对象传进去。注意返回类型,可链式调用。

HttpClientBuilder org.apache.http.impl.client.HttpClientBuilder.setDefaultRequestConfig(RequestConfig config)

将RequestConfig对象传进去。

CloseableHttpClient org.apache.http.impl.client.HttpClientBuilder.build()

至此拿到了httpClient对象。它是线程安全的。

3.示例代码

也可见yichuutil项目。

4.回收过期链接

服务端若资源紧张,可能关闭一些我们已经建立好的链接。而连接池自己不会关,所以需要一个定时任务来清理。PoolingHttpClientConnectionManager类已经提供了此方法。

void org.apache.http.impl.conn.PoolingHttpClientConnectionManager.closeExpiredConnections()

图4-1 官网相关介绍,清理过期链接

5.注意

调用CloseableHttpResponse org.apache.http.impl.client.CloseableHttpClient.execute(HttpUriRequest request)时,会从连接池中找出一条链接通路来通信,此方法仍是同步的。所以要想做到并发通信,数据库连接池必须配合多线程使用。

时间: 2024-09-20 00:33:25

HttpComponents 之客户端连接池的相关文章

通讯-C# 客户端连接服务器端如果断线重连

问题描述 C# 客户端连接服务器端如果断线重连 我现在设计的是一个客户端,连接了100台硬件,通讯协议采用的是Modbus tcp和FTP.如果中间一台硬件断线了,如何避免程序崩溃(我采用的是线程池)?还有断线后重新连接上后,程序能自动连接上,并上传数据?还望大神能够多多指教,初学很多东西都不懂. 解决方案 中间一台硬件断线了,如何避免程序崩溃(我采用的是线程池)? 用try catch或错误码做错误处理程序能自动连接上,程序主动去连接就可以了 解决方案二: 可以考虑用心跳包,时间长了重新连接

C# 一台客户端连接多台服务器端进行数据传输需要注意什么?

问题描述 C# 一台客户端连接多台服务器端进行数据传输需要注意什么? 一台客户端连接多台服务器端进行数据传输,要求多台服务器在接收到客户端指令后,在同一个时刻将数据上传. 测试中,一台客户端一台服务器的数据传输已经实现.与多台服务器连接我采用的是线程池,但是测试的时候出现一个问题,就是只上来一台服务器上的数据,而其他的服务器的数据没有上来,这个原因是什么?跟端口有关系么?我们采用的协议为Modbus tcp和FTP. 解决方案 多线程耀注意代码的同步,以及如何处理分包粘包,具体google下.

[20171106]配置客户端连接注意.txt

[20171106]配置客户端连接注意.txt --//在配置客户端连接时一般建议使用Net Manager工具,windows下调用执行Net Manager. --//linux下执行 netmgr,这样能一定程度避免copy & paste的 错误. --//我这里想说的是在连接类型选择上一定要注意,一般存在4中选择: 数据库默认设置 专用服务器 共享服务器 池中服务器. --//最好明确设置那种模式,而不是选择"数据库默认设置"模式,这样会导致以后配置启用"共

Oracle RAC实现客户端连接负载均衡

实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连接的负载均衡,一个是基于服务器端监听器(Listener)收集到的信息来将新的连接请求分配到连接数较少实例上的实现方式.本文主要讨论的是基于客户端连接的负载均衡,并给出演示. 一.客户端的负载均衡 客户端的负载均衡主要是通过为tnsnames.ora增加load_balance=yes条目来实现,下

VPN客户端连接Linux服务端访问速度变慢怎么解决

VPN客户端连接Linux服务端访问速度变慢怎么解决   解决办法有三种: 方法一:编辑pptpd源码,增加MTU; 方法二:使用脚本,在pptp接口连接up以后增加MTU; 方法三:不使用MPPE加密; 第一种虽然从根本上解决了问题,但是由于水平问题放弃了;第三种由于取消了传输加密,心理上觉得不安全,也放弃了; 方法二 /etc/ppp/ip-up.d/mppefixmtu.sh #!/bin/sh CURRENT_MTU="`ip link show $1 | grep -Po '(?<

Centos 6.4安装pptp同时配置debian gnome桌面vpn客户端连接

 pptp vpn我相信很多的朋友都有听过吧,今天我就为各位介绍Centos 6.4安装pptp同时配置debian gnome桌面vpn客户端连接的例子,希望下文对各位有帮助.     以下是基于Linode VPS Centos 6.4下安装pptp服务,记住Linode VPS是Xen虚拟的,所以请看清楚环境配置. 快速安装,当然少不了yum: # rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-cu

锐捷客户端连接失败怎么办

  锐捷客户端连接失败怎么办 锐捷连不上解决办法 方法一:重装网卡 第一步 造成无法认证服务器可能是因为网卡无法正常工作.这时候,可以win+r输入devmgmt.msc,打开设备管理器; 第二步 找到设备管理器--网络适配器,找到本地网卡,可以这样区分,没有wireless的就是本地网卡; 第三步 选中本地网卡,右键单击,然后先[卸载]网卡,等卸载完毕后,再重新[扫描硬件改动]重装网卡,使网卡恢复初始设置. 方法二:修改网卡模式 第一步 单击计算机右下角的网络标识,选中[打开网络共享和中心];

启动-zookeeper客户端连接一直报无法定位登录配置信息,可能原因有哪些?求教?

问题描述 zookeeper客户端连接一直报无法定位登录配置信息,可能原因有哪些?求教? 启动三台主机,有两台主机客户端连接zookeeper时一直报错无法定位登录配置,可能都有哪些原因造成的? 解决方案 这是我执行zkCli.cmd报错信息:图片说明 大家帮忙分析分析错误原因 解决方案二: 首先要清楚,slave之间是不用建互信的. 你看错误很显示是连不上zk.那继续跟,为什么连不上. 先jps一下,看看zk启来了吗,经常有的问题会导致它启不来.然后telnet zk的远程端口,看看能不能通,

vs2008-VS2008 编译之后的服务端与客户端连接总是报错,是什么原因啊?

问题描述 VS2008 编译之后的服务端与客户端连接总是报错,是什么原因啊? 解决方案 只要你的程序有错,都会出现类似这样的错误报告.你得结合调试器和源代码才能知道是什么问题.这么问问不出结果的.好比你去医院看病,你说你哪里不舒服,医生都是建议你先化验拍片再说,没有谁一听说你不舒服马上就知道你什么病了,那是老中医. 解决方案二: 仔细检查下指针,有没有哪处是空指针或是错的指针 解决方案三: 出错后,点击调试程序,查看一下错误的callstack.