You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by Apache Wiki <wi...@apache.org> on 2007/07/13 13:47:08 UTC

[Jakarta-httpclient Wiki] Update of "HttpClient3vsHttpClient4vsHttpCore" by OlegKalnichevski

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Jakarta-httpclient Wiki" for change notification.

The following page has been changed by OlegKalnichevski:
http://wiki.apache.org/jakarta-httpclient/HttpClient3vsHttpClient4vsHttpCore

New page:
= Client side HTTP performance benchmarks =

'''BIG FAT DISCLAIMER''': These benchmarks are NOT based on any scientific methodology so the numbers are likely to be non-precise  

== HttpClient 3.x code ==

{{{
public static void main(String[] args) throws Exception {
    if (args.length < 2) {
        System.out.println("Usage: <target URI> <no of requests>");
        System.exit(-1);
    }
    String targetURI = args[0];
    int n = Integer.parseInt(args[1]);
    
    HttpClient httpclient = new HttpClient();
    httpclient.getParams().setVersion(
            HttpVersion.HTTP_1_1);
    httpclient.getParams().setBooleanParameter(
            HttpMethodParams.USE_EXPECT_CONTINUE, false);
    httpclient.getHttpConnectionManager().getParams()
            .setStaleCheckingEnabled(false);
    
    GetMethod httpget = new GetMethod(targetURI);

    byte[] buffer = new byte[4096];
    
    long startTime;
    long finishTime;
    int successCount = 0;
    int failureCount = 0;
    String serverName = "unknown";
    long total = 0;
    long contentLen = 0;
    long totalContentLen = 0;
    
    startTime = System.currentTimeMillis();
    for (int i = 0; i < n; i++) {
        try {
            httpclient.executeMethod(httpget);
            InputStream instream = httpget.getResponseBodyAsStream();
            contentLen = 0;
            if (instream != null) {
                int l = 0;
                while ((l = instream.read(buffer)) != -1) {
                    total += l;
                    contentLen += l;
                }
            }
            successCount++;
            totalContentLen += contentLen;
        } catch (IOException ex) {
            failureCount++;
        } finally {
            httpget.releaseConnection();
        }
    }
    finishTime = System.currentTimeMillis();
    
    Header header = httpget.getResponseHeader("Server");
    if (header != null) {
        serverName = header.getValue();
    }
    
    float totalTimeSec = (float) (finishTime - startTime) / 1000;
    float reqsPerSec = (float) successCount / totalTimeSec; 
    float timePerReqMs = (float) (finishTime - startTime) / (float) successCount; 
    
    System.out.print("Server Software:\t");
    System.out.println(serverName);
    System.out.println();
    System.out.print("Document URI:\t\t");
    System.out.println(targetURI);
    System.out.print("Document Length:\t");
    System.out.print(contentLen);
    System.out.println(" bytes");
    System.out.println();
    System.out.print("Time taken for tests:\t");
    System.out.print(totalTimeSec);
    System.out.println(" seconds");
    System.out.print("Complete requests:\t");
    System.out.println(successCount);
    System.out.print("Failed requests:\t");
    System.out.println(failureCount);
    System.out.print("Content transferred:\t");
    System.out.print(total);
    System.out.println(" bytes");
    System.out.print("Requests per second:\t");
    System.out.print(reqsPerSec);
    System.out.println(" [#/sec] (mean)");
    System.out.print("Time per request:\t");
    System.out.print(timePerReqMs);
    System.out.println(" [ms] (mean)");
}

}}}

== HttpClient 4.x code ==

{{{
    if (args.length < 2) {
        System.out.println("Usage: <target URI> <no of requests>");
        System.exit(-1);
    }
    String targetURI = args[0];
    int n = Integer.parseInt(args[1]);
    
    BasicHttpParams params = new BasicHttpParams();
    params.setParameter(HttpProtocolParams.PROTOCOL_VERSION, 
            HttpVersion.HTTP_1_1);
    params.setBooleanParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, 
            false);
    params.setBooleanParameter(HttpConnectionParams.STALE_CONNECTION_CHECK, 
            false);
    params.setIntParameter(HttpConnectionParams.SOCKET_BUFFER_SIZE, 
            2 * 1024);
    
    DefaultHttpClient httpclient = new DefaultHttpClient(params);
    
    HttpGet httpget = new HttpGet(targetURI);

    byte[] buffer = new byte[4096];
    
    long startTime;
    long finishTime;
    int successCount = 0;
    int failureCount = 0;
    String serverName = "unknown";
    long total = 0;
    long contentLen = 0;
    long totalContentLen = 0;
    
    startTime = System.currentTimeMillis();
    for (int i = 0; i < n; i++) {
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream instream = entity.getContent();
            try {
                contentLen = 0;
                if (instream != null) {
                    int l = 0;
                    while ((l = instream.read(buffer)) != -1) {
                        total += l;
                        contentLen += l;
                    }
                }
                successCount++;
                totalContentLen += contentLen;
            } catch (IOException ex) {
                httpget.abort();
                failureCount++;
            } finally {
                instream.close();
            }
        }
        Header header = response.getFirstHeader("Server");
        if (header != null) {
            serverName = header.getValue();
        }
    }
    finishTime = System.currentTimeMillis();
    
    float totalTimeSec = (float) (finishTime - startTime) / 1000;
    float reqsPerSec = (float) successCount / totalTimeSec; 
    float timePerReqMs = (float) (finishTime - startTime) / (float) successCount; 
    
    System.out.print("Server Software:\t");
    System.out.println(serverName);
    System.out.println();
    System.out.print("Document URI:\t\t");
    System.out.println(targetURI);
    System.out.print("Document Length:\t");
    System.out.print(contentLen);
    System.out.println(" bytes");
    System.out.println();
    System.out.print("Time taken for tests:\t");
    System.out.print(totalTimeSec);
    System.out.println(" seconds");
    System.out.print("Complete requests:\t");
    System.out.println(successCount);
    System.out.print("Failed requests:\t");
    System.out.println(failureCount);
    System.out.print("Content transferred:\t");
    System.out.print(total);
    System.out.println(" bytes");
    System.out.print("Requests per second:\t");
    System.out.print(reqsPerSec);
    System.out.println(" [#/sec] (mean)");
    System.out.print("Time per request:\t");
    System.out.print(timePerReqMs);
    System.out.println(" [ms] (mean)");
}

}}}

== HttpCore 4.x code ==

{{{
public static void main(String[] args) throws Exception {
    if (args.length < 2) {
        System.out.println("Usage: <target URI> <no of requests>");
        System.exit(-1);
    }
    URI targetURI = new URI(args[0]);
    int n = Integer.parseInt(args[1]);
    
    HttpHost targetHost = new HttpHost(
            targetURI.getHost(), 
            targetURI.getPort()); 
    
    BasicHttpParams params = new BasicHttpParams();
    params.setParameter(HttpProtocolParams.PROTOCOL_VERSION, 
            HttpVersion.HTTP_1_1);
    params.setBooleanParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, 
            false);
    params.setBooleanParameter(HttpConnectionParams.STALE_CONNECTION_CHECK, 
            false);
    params.setIntParameter(HttpConnectionParams.SOCKET_BUFFER_SIZE, 
            2 * 1024);
    
    BasicHttpRequest httpget = new BasicHttpRequest("GET", targetURI.getPath());

    byte[] buffer = new byte[4096];
    
    long startTime;
    long finishTime;
    int successCount = 0;
    int failureCount = 0;
    String serverName = "unknown";
    long total = 0;
    long contentLen = 0;
    long totalContentLen = 0;
    
    HttpRequestExecutor httpexecutor = new HttpRequestExecutor();
    BasicHttpProcessor httpproc = new BasicHttpProcessor(); 
    // Required protocol interceptors
    httpproc.addInterceptor(new RequestContent());
    httpproc.addInterceptor(new RequestTargetHost());
    // Recommended protocol interceptors
    httpproc.addInterceptor(new RequestConnControl());
    httpproc.addInterceptor(new RequestUserAgent());
    httpproc.addInterceptor(new RequestExpectContinue());
    
    HttpContext context = new HttpExecutionContext(null);

    DefaultHttpClientConnection conn = new DefaultHttpClientConnection();

    DefaultConnectionReuseStrategy connStrategy = new DefaultConnectionReuseStrategy(); 
    
    startTime = System.currentTimeMillis();
    for (int i = 0; i < n; i++) {
        if (!conn.isOpen()) {
            Socket socket = new Socket(
                    targetHost.getHostName(), 
                    targetHost.getPort() > 0 ? targetHost.getPort() : 80);
            conn.bind(socket, params);
        }

        context.setAttribute(HttpExecutionContext.HTTP_CONNECTION, conn);
        context.setAttribute(HttpExecutionContext.HTTP_TARGET_HOST, targetHost);
        context.setAttribute(HttpExecutionContext.HTTP_REQUEST, httpget);
        httpexecutor.preProcess(httpget, httpproc, context);

        HttpResponse response = httpexecutor.execute(httpget, conn, context);
        
        context.setAttribute(HttpExecutionContext.HTTP_RESPONSE, response);
        httpexecutor.postProcess(response, httpproc, context);
        
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream instream = entity.getContent();
            try {
                contentLen = 0;
                if (instream != null) {
                    int l = 0;
                    while ((l = instream.read(buffer)) != -1) {
                        total += l;
                        contentLen += l;
                    }
                }
                successCount++;
                totalContentLen += contentLen;
            } catch (IOException ex) {
                conn.shutdown();
                failureCount++;
            } finally {
                instream.close();
            }
        }
        if (!connStrategy.keepAlive(response, context)) {
            conn.close();
        }
        Header header = response.getFirstHeader("Server");
        if (header != null) {
            serverName = header.getValue();
        }
    }
    finishTime = System.currentTimeMillis();
    
    float totalTimeSec = (float) (finishTime - startTime) / 1000;
    float reqsPerSec = (float) successCount / totalTimeSec; 
    float timePerReqMs = (float) (finishTime - startTime) / (float) successCount; 
    
    System.out.print("Server Software:\t");
    System.out.println(serverName);
    System.out.println();
    System.out.print("Document URI:\t\t");
    System.out.println(targetURI);
    System.out.print("Document Length:\t");
    System.out.print(contentLen);
    System.out.println(" bytes");
    System.out.println();
    System.out.print("Time taken for tests:\t");
    System.out.print(totalTimeSec);
    System.out.println(" seconds");
    System.out.print("Complete requests:\t");
    System.out.println(successCount);
    System.out.print("Failed requests:\t");
    System.out.println(failureCount);
    System.out.print("Content transferred:\t");
    System.out.print(total);
    System.out.println(" bytes");
    System.out.print("Requests per second:\t");
    System.out.print(reqsPerSec);
    System.out.println(" [#/sec] (mean)");
    System.out.print("Time per request:\t");
    System.out.print(timePerReqMs);
    System.out.println(" [ms] (mean)");
}

}}}

---------------------------------------------------------------------
To unsubscribe, e-mail: httpcomponents-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: httpcomponents-dev-help@jakarta.apache.org