`
jnwzping
  • 浏览: 18400 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HttpAsyncClient 做并发长连接的一个实例

    博客分类:
  • Java
阅读更多

 

import java.util.concurrent.CountDownLatch;

import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.concurrent.FutureCallback;
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
import org.apache.http.impl.nio.client.HttpAsyncClients;

public class AsyncClientHttpExchangeFutureCallback {

    public static void main(final String[] args) throws Exception {
        RequestConfig requestConfig = RequestConfig.custom()
            .setSocketTimeout(300000)
            .setConnectTimeout(300000).build();
        CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
            .setDefaultRequestConfig(requestConfig).setMaxConnTotal(1000).setMaxConnPerRoute(1000)//此处为多并发设置
.build();
        try {
            httpclient.start();
            HttpGet[] requests  =new HttpGet[900];
            for (int i = 0; i < 900; i++) {
	           requests[i] = new HttpGet("http://192.168.71.192:8100/sub?cname="+i);
	           
            }
            final CountDownLatch latch = new CountDownLatch(requests.length+1);
            for (final HttpGet request: requests) {
                httpclient.execute(request, new FutureCallback<HttpResponse>() {

                    public void completed(final HttpResponse response) {
                        latch.countDown();
                        System.out.println(request.getRequestLine() + "->" + response.getStatusLine());
                    }

                    public void failed(final Exception ex) {
                        latch.countDown();
                        System.out.println(request.getRequestLine() + "->" + ex);
                    }

                    public void cancelled() {
                        latch.countDown();
                        System.out.println(request.getRequestLine() + " cancelled");
                    }

                });
            }
            latch.await();
            System.out.println("Shutting down");
        } finally {
            httpclient.close();
        }
        System.out.println("Done");
    }

}

 

 

分享到:
评论
2 楼 wuneng94zui 2014-12-22  
能多做一些解释就更好了
1 楼 wuneng94zui 2014-12-22  
不错,给出了一些思路

相关推荐

    httpasyncclient-4.1.3.zip

    1. **非阻塞I/O**:HttpAsyncClient 使用NIO(Non-blocking I/O)模型,允许在单个线程中处理多个并发连接,显著提高了资源利用率和并发能力。 2. **异步API**:提供了一套异步编程接口,允许开发者启动HTTP操作而...

    基于Java的实例源码-异步HTTP客户端开发包 HttpAsyncClient.zip

    本实例源码包"HttpAsyncClient.zip"就是基于此库的一个示例,帮助开发者深入理解如何在实际项目中应用异步HTTP请求。 1. **Apache HttpClient库**:Apache HttpClient是Apache软件基金会开发的一个开放源代码项目,...

    HttpAsyncClient异步http工具包

    1. **初始化**: 首先,需要创建一个`CloseableHttpAsyncClient`实例,配置好相关参数如连接池大小、超时时间等。 ```java HttpAsyncClientBuilder builder = HttpAsyncClients.custom(); // 添加配置... ...

    基于java的异步HTTP客户端开发包 HttpAsyncClient.zip

    1. **初始化与配置**:在使用HttpAsyncClient之前,需要先创建一个HttpClientBuilder实例,并对其进行配置,如设置连接池大小、超时时间、重试策略等。然后调用build()方法生成HttpAsyncClient实例。 2. **异步请求...

    异步HTTP客户端开发包 HttpAsyncClient

    在使用HttpAsyncClient时,开发者首先需要创建一个`CloseableHttpAsyncClient`实例,并进行初始化。这通常涉及到设置连接池大小、超时时间、重试策略等配置。然后,你可以通过`execute`方法发送一个或多个HTTP请求,...

    httpasyncclient 源码

    总的来说,Apache HttpAsyncClient是一个强大的工具,它的异步特性和NIO支持使得它在处理大量并发请求时表现优异。通过深入研究源码,开发者可以更好地掌握其内部机制,从而在实际项目中更高效地利用这个库。

    java源码:异步HTTP客户端开发包 HttpAsyncClient.rar

    Apache HttpClient项目为开发者提供了一个强大的工具,它的子模块HttpAsyncClient专门用于异步非阻塞的HTTP通信,极大地提高了性能和响应速度。本篇将深入探讨HttpAsyncClient的核心概念、关键API以及实际应用中的...

    JAVA上百实例源码以及开源项目源代码

    Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...

    HttpClient Https实战

    同时,对于长连接的维护,HttpClient支持Keep-Alive特性,可以减少建立新连接的开销。 此外,HttpClient还提供了异步API,适用于非阻塞I/O场景,可以提高系统的并发能力。通过使用HttpAsyncClient,我们可以异步...

    HttpClient

    HttpClient中的一个核心概念是连接管理。在频繁的HTTP请求中,建立和关闭TCP连接是耗时的,因此HttpClient引入了连接池机制。连接池允许复用已建立的TCP连接,减少了每次请求时的连接创建时间,提高了整体性能。...

    httpclient-4.5jar包

    1. 创建HttpClient实例:首先需要创建一个HttpClient对象,例如使用`HttpClients.createDefault()`,或者自定义配置。 2. 构建HttpGet或HttpPost对象:根据需求选择HTTP方法,设置URL和其他请求头信息。 3. 执行请求...

    Async-http-client

    这个库的核心特点在于它支持非阻塞I/O,能够处理大量的并发连接,从而极大地提高了应用程序的性能。在Java应用中,特别是在服务器端开发或者需要频繁进行HTTP请求的场景下,Async-http-client是一个非常理想的工具。...

    HTTPClient 的一个封装

    这个“HTTPClient的一个封装”显然指的是对Apache HttpClient库进行了定制化处理,以适应特定项目需求或者简化API使用。下面将详细讨论HttpClient的核心概念、封装的目的以及可能实现的方式。 HttpClient是Apache...

    java开源包4

    HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...

    httpcomponents-client-4.2.5 jar.zip

    2. 连接管理:改进了连接池的管理策略,可以更好地控制并发连接数量,避免资源浪费。 3. 错误处理:增强了错误处理机制,提供了更详细的错误信息,便于开发者调试和解决问题。 4. 兼容性:保持了对早期版本API的兼容...

    javaHttp异步请求

    2. **Future**: 发送异步请求后,`HttpAsyncClient`返回一个`Future&lt;HttpResponse&gt;`对象。这个对象可以注册回调函数,当HTTP响应准备好时,回调函数会被调用。也可以使用`Future`的`get()`方法阻塞直到响应到达,但...

    httpclient4 封装

    使用HttpClient首先需要创建一个`HttpClient`实例。这通常通过`HttpClientBuilder`或者`HttpAsyncClientBuilder`来构建,可以根据需求定制各种配置,如连接池大小、超时时间等。 2. **执行HTTP请求** HttpClient...

    HttpClient畅游开心网.zip

    `HttpAsyncClient`允许我们以非阻塞方式发送请求,通过监听器或回调函数处理响应,适用于高并发场景。 9. **重试策略**:HttpClient允许自定义重试策略,如在网络不稳定时自动重试请求,避免因短暂的网络问题而失败...

    Httpclient资源包.zip

    - **异步请求**:使用HttpAsyncClient进行非阻塞I/O,适用于高并发场景。 - **多部分表单提交**:HttpPost配合MultipartEntityBuilder实现文件上传。 - **HTTPS支持**:配置SSLContext和X509TrustManager以处理...

    httpclient-4.5所需jar包

    HTTPClient是Apache软件基金会的一个开放源代码项目,它提供了一个用Java实现的HTTP客户端API,使得开发者能够方便地创建能够处理HTTP协议的应用程序。在Java开发中,HTTPClient库经常被用于执行HTTP请求,比如GET、...

Global site tag (gtag.js) - Google Analytics