3.X
http://hc.apache.org/httpclient-3.x/performance.html
public class MultiThreadedExample { /** * Constructor for MultiThreadedExample. */ public MultiThreadedExample() { super(); } public static void main(String[] args) { // Create an HttpClient with the MultiThreadedHttpConnectionManager. // This connection manager must be used if more than one thread will // be using the HttpClient. HttpClient httpClient = new HttpClient(new MultiThreadedHttpConnectionManager()); // Set the default host/protocol for the methods to connect to. // This value will only be used if the methods are not given an absolute URI httpClient.getHostConfiguration().setHost("hc.apache.org", 80, "http"); // create an array of URIs to perform GETs on String[] urisToGet = { "/", "/httpclient-3.x/status.html", "/httpclient-3.x/methods/", "http://svn.apache.org/viewvc/httpcomponents/oac.hc3x/" }; // create a thread for each URI GetThread[] threads = new GetThread[urisToGet.length]; for (int i = 0; i < threads.length; i++) { GetMethod get = new GetMethod(urisToGet[i]); get.setFollowRedirects(true); threads[i] = new GetThread(httpClient, get, i + 1); } // start the threads for (int j = 0; j < threads.length; j++) { threads[j].start(); } } /** * A thread that performs a GET. */ static class GetThread extends Thread { private HttpClient httpClient; private GetMethod method; private int id; public GetThread(HttpClient httpClient, GetMethod method, int id) { this.httpClient = httpClient; this.method = method; this.id = id; } /** * Executes the GetMethod and prints some satus information. */ public void run() { try { System.out.println(id + " - about to get something from " + method.getURI()); // execute the method httpClient.executeMethod(method); System.out.println(id + " - get executed"); // get the response body as an array of bytes byte[] bytes = method.getResponseBody(); System.out.println(id + " - " + bytes.length + " bytes read"); } catch (Exception e) { System.out.println(id + " - error: " + e); } finally { // always release the connection after we're done method.releaseConnection(); System.out.println(id + " - connection released"); } } } }
4.X
http://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/connmgmt.html
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(cm) .build(); // URIs to perform GETs on String[] urisToGet = { "http://www.domain1.com/", "http://www.domain2.com/", "http://www.domain3.com/", "http://www.domain4.com/" }; // create a thread for each URI GetThread[] threads = new GetThread[urisToGet.length]; for (int i = 0; i < threads.length; i++) { HttpGet httpget = new HttpGet(urisToGet[i]); threads[i] = new GetThread(httpClient, httpget); } // start the threads for (int j = 0; j < threads.length; j++) { threads[j].start(); } // join the threads for (int j = 0; j < threads.length; j++) { threads[j].join(); }
import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.*; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicHeader; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; /** * Created by * on 16/10/11. * Description: 测试pool会自动管理connection */ public class Test { // 长连接保持30秒 static PoolingHttpClientConnectionManager pollingConnectionManager = new PoolingHttpClientConnectionManager(30, TimeUnit.SECONDS); public static CloseableHttpClient buildHttpClient() { // 总连接数 pollingConnectionManager.setMaxTotal(2); // 同路由的并发数 pollingConnectionManager.setDefaultMaxPerRoute(500); HttpClientBuilder httpClientBuilder = HttpClients.custom(); httpClientBuilder.setConnectionManager(pollingConnectionManager); // 重试次数,默认是3次,没有开启 httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(2, true)); // 保持长连接配置,需要在头添加Keep-Alive httpClientBuilder.setKeepAliveStrategy(DefaultConnectionKeepAliveStrategy.INSTANCE); List<Header> headers = new ArrayList<>(); headers.add(new BasicHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36")); headers.add(new BasicHeader("Accept-Encoding", "gzip,deflate")); headers.add(new BasicHeader("Accept-Language", "zh-CN,zh;q=0.8,en;q=0.6")); headers.add(new BasicHeader("Connection", "keep-alive")); httpClientBuilder.setDefaultHeaders(headers); return httpClientBuilder.build(); } public static void main(String args[]) throws IOException, InterruptedException { CloseableHttpClient closeableHttpClient = buildHttpClient(); HttpPost post = new HttpPost(""); StringEntity se = new StringEntity(""); se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); post.setEntity(se); CountDownLatch countDownLatch = new CountDownLatch(10); for (int i = 10; i > 0; i--) { new Thread(() -> { try { String result = closeableHttpClient.execute(post, new ResponseHandler<String>() { @Override public String handleResponse(HttpResponse response) throws IOException { int status = response.getStatusLine().getStatusCode(); HttpEntity entity = response.getEntity(); if (status >= 200 && status < 300) { return EntityUtils.toString(entity); } System.out.println(status); return null; } }); System.out.println(result); countDownLatch.countDown(); } catch (IOException e) { e.printStackTrace(); countDownLatch.countDown(); } }).start(); } countDownLatch.await(); System.in.read(); } }
相关推荐
综上所述,升级到HttpComponents HttpClient 4.x是一个复杂的过程,涉及到对新API的深入学习,理解新的编程模型和网络编程的优化。升级的好处包括性能的提升、更好的错误处理机制以及对最新HTTP协议特性的支持。通过...
在4.3.X版本中,它可能包含了性能优化,新特性和bug修复。 描述中提到的链接指向了一个ITEYE博客,虽然内容未给出,但可以推测博主可能分享了关于使用HTTPClient 4.3.X的一些经验,可能包括配置,最佳实践,或者是...
在4.x版本中,HTTPClient进行了重大更新,与之前的3.x版本相比,它引入了更多的功能、优化和改进。本文将深入探讨HTTPClient 4.x的核心特性,并基于提供的"httpclient4.1_examples"示例文件,解析如何使用这个库进行...
7. **性能优化**:通过缓存机制,HttpClient可以缓存响应,减少不必要的网络通信。 8. **国际化与本地化**:HttpClient支持多种字符集和编码,适应不同地区的Web服务。 **HttpClient 4.3.x的依赖分析** ...
6. 性能优化: - **连接池配置**:根据应用需求调整连接池的最大连接数和超时时间,以平衡资源使用和响应速度。 - **线程池管理**:使用线程池并发处理多个请求,避免创建过多线程消耗资源。 - **异步执行**:...
HttpClient 4.4.1是HttpClient系列的一个稳定版本,它主要关注性能优化和错误修复。以下是一些关键特性: - **连接管理**:HttpClient 4.4.1引入了更智能的连接管理和重用策略,提高了并发性能。它支持多路复用,...
4. **性能优化**:HttpClient 4.x相比3.x在性能上有显著提升,尤其是在连接管理和并发请求处理上。 5. **新特性支持**:HttpClient 4.x增加了对HTTP/1.1、HTTP/2等协议的支持,而HttpClient 3.x主要针对HTTP/1.0。 ...
虽然`commons-httpclient-3.0.jar`是一个经典版本,但随着Java的发展,Apache社区已经推出了更现代的HttpClient 4.x系列,提供了更多改进和优化,如更好的线程安全、更丰富的API以及对HTTP/2的支持。因此,建议在新...
HTTPClient 4.4和4.5之间的主要差异可能在于错误修复、性能优化和新功能的添加。 HTTPCore是HTTPClient的核心组件,它提供了基本的HTTP协议处理功能,如TCP连接管理、HTTP消息解析和编码等。这个库的设计目的是为了...
HttpClient3.1.jar是Apache软件基金会的一个...然而,需要注意的是,HttpClient3.1已较为陈旧,后续的版本如HttpClient 4.x引入了更多的改进和优化,因此在新的项目中,建议使用更新的版本以获得更好的性能和兼容性。
HttpCore的更新主要关注性能优化和错误修复,确保HttpClient的稳定性和效率。 3. **httpmime-4.5.13.jar**:这个库专门用于处理HTTP请求中的MIME类型数据,特别是当需要发送复杂或二进制数据时,如文件上传。它提供...
HttpClient 4.x引入了PoolingHttpClientConnectionManager,它可以复用已建立的TCP连接,提高性能。你需要配置合适的最大连接数、每个路由的最大连接数,以及连接的超时时间。 此外,HttpClient支持多种认证机制,...
7. **性能优化**: - 面向流的API:使用`HttpEntity`和`InputStream`/`OutputStream`处理大文件上传下载,避免内存溢出。 - 异步处理:通过`Future`或回调函数实现非阻塞的异步请求。 8. **pom文件**: - pom...
从3.x版本到后来的4.x版本,HttpClient进行了大量改进,包括API简化、更好的线程安全性和性能优化。然而,对于某些场景,3.x版本可能更符合某些开发者的习惯或者兼容性要求。 5. **替代品与升级**:随着Java生态的...
HttpClient 4.2.2是HttpClient系列的一个重要版本,它在4.2.x系列中具有稳定性和性能的双重保障。 一、HttpClient 4.2.2的基础概念与特性 1. 基于Java的HTTP客户端接口:HttpClient 4.2.2提供了一套全面的API,使得...
3. `httpclient-cache-4.x.jar`:这个模块提供了HTTP缓存功能,可以根据HTTP缓存规范存储和检索已请求的资源,减少网络延迟。 4. `httpasyncclient-4.x.jar`:对于异步HTTP操作,这个库提供了非阻塞I/O支持,可以...
通过深入理解和熟练运用HttpClient,开发者能够更好地控制和优化网络通信,提升应用的性能和稳定性。在实际项目中,结合具体的业务需求和场景,灵活运用HttpClient提供的功能,是提高开发效率和产品质量的关键。
不过,需要注意的是,随着技术的发展,HttpClient的后续版本可能会提供更多的特性或修复一些已知问题,因此在新项目中,可能需要考虑使用更现代的版本,如HttpClient 4.5.x或更高版本,以获取更好的性能和兼容性。
然而,需要注意的是,虽然HttpClient 3.x系列是一个成熟且广泛使用的库,但它已不再维护,最新的版本是4.x系列。对于新的项目,推荐使用Apache HttpClient 4.x或更高版本,或者考虑使用Java 7及以后版本提供的内置`...
HttpClient 4.x系列是HttpClient的最新稳定版本,它带来了许多改进和新特性,旨在提高性能、稳定性和易用性。4.5.3版是在4.5系列中的一个小更新,修复了一些已知问题,提升了整体的可靠性和兼容性。 HttpClient库的...