Hi Ben,

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]



Reply via email to