Hi Ken, Can you elaborate more on "and if these exceeds a (configurable) limit, you'll get an exception."?
I am not quite understand. Ken Krugler wrote: > > Hi Yan Cheng, > > I haven't used HttpClient 3.x for a while - switched to 4.0 and > haven't looked back. > > But in general method A is going to work better. You can configure the > MultiThreadedHttpConnectionManager with a maximum number of threads - > e.g. you could pick a number equal to the max # of threads that you > know will be using it. If it's configured with less than the max > number of threads, then some of your connection requests will block > until a free connection becomes available - and if these exceeds a > (configurable) limit, you'll get an exception. > > In extreme situations I've run with up to 1000 threads and one > connection manager, so I don't think you'll hit any limits there. > > -- Ken > > > On Aug 16, 2009, at 6:11am, Yan Cheng Cheok wrote: > >> Hi all, >> >> All the while, I am using HttpClient in multithreaded environment. >> For every threads, when they initiate a connection, they will create >> a complete new HttpClient instance. >> >> Recently, I discover, by using this approach, it can cause the user >> is having too many port being opened, and most of the connections >> are in TIME_WAIT state. >> >> http://www.opensubscriber.com/message/commons-httpclient-...@jakarta.apache.org/86045.html >> >> Hence, instead of per thread doing : >> HttpClient c = new HttpClient(); >> try { >> c.executeMethod(method); >> } >> catch(...) { >> } >> finally { >> method.releaseConnection(); >> } >> >> >> We plan to have : >> >> [METHOD A] >> >> // global_c is initialized once through >> // HttpClient global_c = new HttpClient(new >> MultiThreadedHttpConnectionManager()); >> >> try { >> global_c.executeMethod(method); >> } >> catch(...) { >> } >> finally { >> method.releaseConnection(); >> } >> >> In normal situation, global_c will be accessed by 50++ threads >> concurrently. I was wondering, whether this will occur any >> performance issue? Is MultiThreadedHttpConnectionManager using lock- >> free mechanism to implement its thread safe policy? >> >> It is possible if 10 threads are using global_c, will the other 40 >> threads being locked? >> >> Or will it better if in every threads, I create a instance for every >> HttpClient, but release the connection manager explicitly. >> >> [METHOD B] >> HttpClient c = new HttpClient(); >> try { >> c.executeMethod(method); >> } >> catch(...) { >> } >> finally { >> method.releaseConnection(); >> c.getHttpConnectionManager().shutdown(); >> } >> >> Is c.getHttpConnectionManager().shutdown() suffer performance issues? >> >> May I know which method (A or B) is better, for application using 50+ >> + threads? >> >> I am using HttpClient 3.1 >> >> Thanks and Regards >> Yan Cheng Cheok >> >> >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org >> For additional commands, e-mail: httpclient-users-h...@hc.apache.org >> > > -------------------------- > Ken Krugler > TransPac Software, Inc. > <http://www.transpac.com> > +1 530-210-6378 > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org > For additional commands, e-mail: httpclient-users-h...@hc.apache.org > > > -- View this message in context: http://www.nabble.com/Best-Practice-to-Use-HttpClient-in-Multithreaded-Environment-tp24993345p25000299.html Sent from the HttpClient-User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org