On Mon, 2007-03-26 at 16:57 +0200, Joan Balagueró wrote: > 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?? >
That's correct. Oleg > 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] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
