org.apache.commons.httpclient学习

初始化连接管理器参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private static String DEFAULT_CHARSET = "GBK";
/** 连接超时时间,由bean factory设置,缺省为8秒钟 */
private int defaultConnectionTimeout = 8000;
/** 回应超时时间, 由bean factory设置,缺省为30秒钟 */
private int defaultSoTimeout = 30000;
/** 闲置连接超时时间, 由bean factory设置,缺省为60秒钟 */
private int defaultIdleConnTimeout = 60000;
//默认每个主机最大连接数
private int defaultMaxConnPerHost = 30;
//默认最大连接数
private int defaultMaxTotalConn = 80;
/** 默认等待HttpConnectionManager返回连接超时(只有在达到最大连接数时起作用):1秒 */
private static final long defaultHttpConnectionManagerTimeout = 3 * 1000;
/**
* 声明一个链接管理器,HTTP连接管理器,该连接管理器必须是线程安全的.
*/
private HttpConnectionManager connectionManager;

声明一个私有化构造方法用来初始化连接管理器,并引入连接池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* 私有的构造方法
*/
private HttpProtocolHandler() {
// 创建一个线程安全的HTTP连接池
connectionManager = new MultiThreadedHttpConnectionManager();
connectionManager.getParams().setDefaultMaxConnectionsPerHost(defaultMaxConnPerHost);
connectionManager.getParams().setMaxTotalConnections(defaultMaxTotalConn);
//使用池来管理连接
IdleConnectionTimeoutThread ict = new IdleConnectionTimeoutThread();
ict.addConnectionManager(connectionManager);
ict.setConnectionTimeout(defaultIdleConnTimeout);
ict.start();
}
`

IdleConnectionTimeoutThread是一个用List实现的连接池,
并且是后台服务线程。list不断的去循环当前的http连接管理器判断当前的连接管理器是否超时关闭。