以下为HttpClient连接池测试代码,得到如下初步结论
1、连接池管理设置整体连接数,
2、连接池管理可以根据域名单独设置连接数,且连接数小于整体的链接数量
3、没个域名下的地址都记做该域名下的链接数量。
4、当http响应结束后,自动归还链接,其他请求直接获取链接使用。
下一步
1、设置链接超时异常机制,释放超时链接
2、http链接自动重试机制
3、继续深入
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import java.io.IOException;
/**
* Created by shuangjun.yang on 2016/3/30.
* httpclient 连接池测试
*/
public class HttpPoolTest {
public static void main(String[] args) throws IOException {
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();
poolingHttpClientConnectionManager.setMaxTotal(10); //连接池最多连接数
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(5); //每个域名的最大连接数,
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(poolingHttpClientConnectionManager)
.build();
HttpGet httpGet = new HttpGet("http://www.begincode.net");
HttpGet httpGet1 = new HttpGet("http://www.begincode.net/blogComment/blogId/95");
new HttpThread(httpClient,httpGet,"1").start();
System.out.println("Thread 1");
new HttpThread(httpClient,httpGet1,"2").start();
System.out.println("Thread 2");
new HttpThread(httpClient,httpGet1,"3").start();
System.out.println("Thread 3");
new HttpThread(httpClient,httpGet1,"4").start();
System.out.println("Thread 4");
new HttpThread(httpClient,httpGet1,"5").start();
System.out.println("Thread 5");
new HttpThread(httpClient,httpGet1,"6").start();
System.out.println("Thread 6");
new HttpThread(httpClient,httpGet1,"7").start();
System.out.println("Thread 7");
}
}
class HttpThread extends Thread {
HttpGet httpGet;
CloseableHttpClient closeableHttpClient;
HttpClientContext httpClientContext;
String flag;
public HttpThread(CloseableHttpClient closeableHttpClient, HttpGet httpGet,String flag) {
this.closeableHttpClient = closeableHttpClient;
this.httpGet = httpGet;
this.httpClientContext = HttpClientContext.create();
this.flag = flag;
}
@Override
public void run() {
try {
CloseableHttpResponse response = closeableHttpClient.execute(
httpGet, httpClientContext);
try {
System.out.println("开始"+flag);
//获取响应实体
HttpEntity entity = response.getEntity();
System.out.println("获取"+flag+"数据");
//从实体获取数据转换字符串
//System.out.println(EntityUtils.toString(entity));
Thread.sleep(10000);
System.out.println("结束"+flag);
}catch (InterruptedException e){
e.printStackTrace();
}finally {
//关闭资源
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}