I believe your HttpClient numbers are being inflated by one-time initialization costs. I was able to get approximately the same numbers with HttpClient and Socket. Please see my examples attached below:
Mike
HttpClient code:
HttpClient client = new HttpClient();
GetMethod get = new GetMethod("http://www.google.com"); client.executeMethod(get);
get.getResponseBodyAsString();
get.releaseConnection(); client = new HttpClient();
get = new GetMethod("SOME_URL");long start = System.currentTimeMillis();
int statusCode = client.executeMethod(get);
int size = 0; InputStream in = get.getResponseBodyAsStream();
byte [] data = new byte[4096];
int read = 0; while ((read = in.read(data)) > 0) {
size += read;
} in.close();
get.releaseConnection();long end = System.currentTimeMillis();
System.out.println(end-start);
Socket code:
HttpClient client = new HttpClient();
GetMethod get = new GetMethod("http://www.google.com"); client.executeMethod(get);
get.getResponseBodyAsString();
get.releaseConnection();long start = System.currentTimeMillis();
Socket soc = new Socket("HOST", 80);
InputStream in = soc.getInputStream();
OutputStream out = soc.getOutputStream(); String command = "GET /SOME_FILE\n\n";
byte [] send = command.getBytes(); out.write(send);
byte b[] = new byte[4096];
int size = 0;
int count = 0;
while( (size = in.read(b)) >= 0) {
count += size;
}
in.close();
out.close();soc.close();
long end = System.currentTimeMillis();
System.out.println(end-start);
On Feb 16, 2004, at 12:40 AM, Ben Wong wrote:
Hi,
I have noticed significant performance difference between using HttpClient and Socket.
I tried to use GetMethod to download a 2MB file from a Webserver sitting
in the LAN. When I do it with HttpClient, it takes around 13-15 seconds
while it will only take less than half a second with Socket.
I was running the code below on a Sun Blade 100 with Solaris 8 installed. J2SDK1.4.2_03 and HttpClient 2.0 final were used.
Any help would be appreciated.
Thanks, Ben
HttpClient code: ---------------- HttpClient client = new HttpClient(); GetMethod get = new GetMethod("http://192.168.0.1/commons-httpclient-2.0-final.zip"); int statusCode = client.executeMethod(get); System.out.println("Status Code: " + statusCode); int size = 0; InputStream in = get.getResponseBodyAsStream(); byte [] data = new byte[10000]; int read = 0; while ((read = in.read(data)) > 0) { size += read; }
in.close(); get.releaseConnection();
Socket Code: ------------ Socket soc = new Socket("192.168.0.11", 80); InputStream in = soc.getInputStream(); OutputStream out = soc.getOutputStream();
String command = "GET http://192.168.0.1/commons-httpclient-2.0-final.zip HTTP/1.0\nUser-Agent: Jakarta Commons-HttpClient/2.0final\nHost: 10.0.3.11\n\n"; byte [] send = command.getBytes();
out.write(send); byte b[] = new byte[4096]; int size = 0; int count = 0; while( (size = in.read(b)) >= 0) { count += size; } in.close(); out.close();
soc.close();
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
