Hello Oleg,

Ok, now I'm understand how the httpclient pool Works (I didn't know anything
about blocking connections until expires the pool timeout).

Because my application hasn't to wait for getting connections (instead of
this, it has to throw a exception), I'll set the
objHttp.getParams().setConnectionManagerTimeout to 1ms. I suppose that
setting this to 0 is equivalent to infinite timeout??

Thanks a lot,

Joan.


-----Mensaje original-----
De: Oleg Kalnichevski [mailto:[EMAIL PROTECTED] 
Enviado el: lunes, 26 de marzo de 2007 16:07
Para: HttpClient User Discussion
Asunto: RE: PROBLEM WITH setMaxTotalConnections

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]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to