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