java http连接池使用_HttpClient高并发下性能优化-http连接池

首先,明确两点:

1.http连接池不是万能的,过多的长连接会占用服务器资源,导致其他服务受阻

2.http连接池只适用于请求是经常访问同一主机(或同一个接口)的情况下

3.并发数不高的情况下资源利用率低下

那么,当你的业务符合上面3点,那么你可以考虑使用http连接池来提高服务器性能

使用http连接池的优点:

1.复用http连接,省去了tcp的3次握手和4次挥手的时间,极大降低请求响应的时间

2.自动管理tcp连接,不用人为地释放/创建连接

使用http连接池的大致流程 :

1.创建PoolingHttpClientConnectionManager实例

2.给manager设置参数

3.给manager设置重试策略

4.给manager设置连接管理策略

5.开启监控线程,及时关闭被服务器单向断开的连接

6.构建HttpClient实例

7.创建HttpPost/HttpGet实例,并设置参数

8.获取响应,做适当的处理

9.将用完的连接放回连接池public class HttpConnectionPoolUtil {

private static Logger logger = LoggerFactory.getLogger(HttpConnectionPoolUtil.class);

private static final int CONNECT_TIMEOUT = Config.getHttpConnectTimeout();// 设置连接建立的超时时间为10s

private static final int SOCKET_TIMEOUT = Config.getHttpSocketTimeout();

private static final int MAX_CONN = Config.getHttpMaxPoolSize(); // 最大连接数

private static final int Max_PRE_ROUTE = Config.getHttpMaxPoolSize();

private static final int MAX_ROUTE = Config.getHttpMaxPoolSize();

private static CloseableHttpClient httpClient; // 发送请求的客户端单例

private static PoolingHttpClientConnectionManager manager; //连接池管理类

private static ScheduledExecutorService monitorExecutor;

private final static Object syncLock = new Object(); // 相当于线程锁,用于线程安全

/**

* 对http请求进行基本设置

* @param httpRequestBase http请求

*/

private static void setRequestConfig(HttpRequestBase httpR

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java HttpClient连接是一种管理HTTP连接的机制,它可以在多个线程之间共享连接,从而提高应用程序的性能。PoolingHttpClientConnectionManager是Java HttpClient连接的一个复杂类,它可以管理连接,为多个线程提供HTTP连接请求。当请求一个新的连接时,如果连接有可用的持久连接连接管理器就会使用其中的一个,而不是再创建一个新的连接使用PoolingHttpClientConnectionManager可以创建一个大小为100的连接,每个目标地址最大连接数为10。具体实现可以参考以下代码: //声明连接管理器 private PoolingHttpClientConnectionManager cm; public HttpConnectionPool() { this.cm = new PoolingHttpClientConnectionManager(); //设置最大连接数(连接大小) cm.setMaxTotal(100); //设置每个主机的连接数 cm.setDefaultMaxPerRoute(10); } 在使用连接通过HttpClient访问解析目标地址时,可以设置请求参数,如连接超时时间、获取连接的最长时间、数据传输的最长时间等。具体实现可以参考以下代码: //创建HttpClient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); //创建HttpGet请求 HttpGet httpGet = new HttpGet("http://www.jd.com/"); //设置请求参数 RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(1000)//设置创建连接的最长时间 .setConnectionRequestTimeout(500)//设置获取连接的最长时间 .setSocketTimeout(10 * 1000)//设置数据传输的最长时间 .build(); httpGet.setConfig(requestConfig); 在使用Jsoup解析HTML文本内容时,可以直接解析某个URL地址、HTML文本内容。Jsoup提供了一套非常省力的API,可通过DOM、CSS以及类似于jQuery的操作方法来取出和操作数据。具体实现可以参考以下代码: //解析HTML文本内容 Document doc = Jsoup.parse(html); //获取HTML标签 Elements links = doc.select("a[href]");

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值