On Mon, 2007-03-26 at 15:39 +0200, Joan Balagueró wrote:
> Hello (again),
>
> I write a small program to test the maxTotalConnections.
>
> It's an application with a static httpClient (multithreaded). The main
> program inits this variable and starts 20 threads that use it to connect to
> our website. Again, I set the limit of active connections to 1. With these
> conditions, all threads are able to connect to destination perfectly (I've
> repeated the same with 200 threads).
>
> I don't know what to do to limit the number of connections. I don't know if
> I'm doing something wrong or if this is a bug of httpClient 3.1
>
> Any suggestions will be much appreciated.
>
> Thanks,
>
> Joan.
>
Joan,
As I said in my previous post to you, it is perfectly plausible all
worker threads simply use the same lone connection to execute HTTP
methods. Those worker threads spend most of the time blocked waiting to
obtain a connection from the connection pool, but this is another
story.
You can easily test this assumption by setting the connection manager
timeout to a very low value (50 ms or something). If you start seeing
ConnectionPoolTimeoutException exceptions thrown by the connection
manager, HttpClient is all right
Oleg
>
> The code is the following:
>
> package com.vcfw.admin.utils;
>
> import java.io.BufferedInputStream;
> import java.io.ByteArrayOutputStream;
> import java.util.concurrent.CountDownLatch;
>
> import org.apache.commons.httpclient.HttpClient;
> import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
> import org.apache.commons.httpclient.cookie.CookiePolicy;
> import org.apache.commons.httpclient.methods.PostMethod;
>
> public class testHttp
> {
> public static HttpClient objHttp = null;
> public static CountDownLatch cdlStart = new CountDownLatch(1);
>
> // Main.
> public static void main(String[] args)
> {
> // The thread
> Runnable r = new Runnable()
> {
> public void run()
> {
> try
> {
> // Wait until start...
> testHttp.cdlStart.await();
>
> // Send the POST request.
> PostMethod objPost = new PostMethod("http://www.grupoventus.com");
> testHttp.objHttp.executeMethod(objPost);
>
> // Read the response.
> BufferedInputStream bis = new
> BufferedInputStream(objPost.getResponseBodyAsStream());
> ByteArrayOutputStream bos = new ByteArrayOutputStream();
> byte[] buffer = new byte[4098];
> int numBytes;
>
> while ((numBytes = bis.read(buffer)) >= 0) bos.write(buffer, 0,
> numBytes);
> byte[] byteResponse = bos.toByteArray();
>
> // Print the response.
> System.out.println(new String(byteResponse));
>
> // Close all
> objPost.releaseConnection();
> bis.close();
> bos.close();
> }
> catch (Exception e) { e.printStackTrace(); }
> }
> };
>
> // MAIN PROGRAM.
> try
> {
> // Init the static httpClient
> objHttp = new HttpClient(new MultiThreadedHttpConnectionManager());
> objHttp.getHttpConnectionManager().getParams().setMaxTotalConnections(1);
> objHttp.getHttpConnectionManager().getParams().setConnectionTimeout(2000);
> objHttp.getHttpConnectionManager().getParams().setSoTimeout(10000);
> objHttp.getHttpConnectionManager().getParams().setStaleCheckingEnabled(true)
> ;
> objHttp.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
>
> // Start 20 threads that connect to "http://www.grupoventus.com".
> for (int i = 0; i < 20; i++)
> {
> new Thread(r).start();
> }
>
> // Start !!
> cdlStart.countDown();
> }
> catch (Exception e) { e.printStackTrace(); }
> }
>
> }
>
>
>
> ---------------------------------------------------------------------
> 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]