hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Kalnichevski <ol...@apache.org>
Subject Re: MultiThreadedHttpConnectionManager
Date Thu, 23 Nov 2006 19:01:49 GMT
On Thu, 2006-11-23 at 18:57 +0200, Eugeny N Dzhurinsky wrote: 
> Hello!
> 
> I have a question: my application consists of several tens of threads, which
> are sharing same HttpClient instance.  I was using
> MultiThreadedHttpConnectionManager to get connections, but I found there are
> too many cases when for some reasons hosts are reporting "connection timed
> out" error, while they are working great. I tried to avoid such cases with
> settin explicit socket factory, which uses JDK 1.4+ connect method with
> timeout. That resolved many issues, but there are still cases when host
> reports connect timed out, but works great itself.
> 
> Looks like the application creates too many sockets (as I wrote in some of my
> previous e-mails), so probably I don't need that multithreaded connection
> manager - but simple connection manager, which closes sockets after they are
> used and HttpMethod.releaseConnection is called, rather than keeps this
> connection for later usage?
> 
> If I write such connection manager, will that affect cookies and related
> information for each host, which is being kept in the HttpClient somehow?
> 

Eugeny,

I believe this problem can be resolved using the standard HttpClient API
without having to write a custom connection manager.

Standard HTTP connection managers keep connections alive for a good
reason. The use of persistent connections usually results in a
noticeable performance improvement. Generally persistent connections are
a good thing. It is, however, the responsibility of _your_ application
to make sure persistent connections get closed in an orderly manner if
they are no longer needed.

HttpConnectionManager interface provides #closeIdleConnections() method
intended to close connections that have been idle for a given period of
time. One is advised to call #closeIdleConnections() on a regular basis
from a dedicated observer thread to drop connections that have been idle
for too long. It is also possible to #closeIdleConnections() from the
processing thread when a unit of work has been completed and a long
period of inactivity is expected. Invoking #closeIdleConnections() with
zero as a parameter will effectively close all connections in the pool.

Hope this helps

Oleg


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: httpclient-user-help@jakarta.apache.org


Mime
View raw message