On Mon, Aug 17, 2009 at 03:33:45PM +0530, Brijesh Deo wrote:
> Hi Oleg,
> 
> Thanks for the reply.
> Regarding the following point that you have mentioned, here is what I am
> trying to do.
> 
> I personally see no benefit of having multiple HttpClient /
> ConnectionManager,
> (a pair per target host). A single HttpClient instance with
> ThreadSafeClientConnManager would do the job just as well.
> 
> 
> [Brijesh] Whenever a client (browser) requests access to any backend
> http server through my reverse proxy, I have to perform an automatic
> form based login into the backend server and then fetch the default page
> and return the content in the HttpResponse to the client (browser) from
> my Reverse proxy server. To perform an automatic form based login, I
> would have all the necessary parameters like login params, username,
> password, login post uri etc. stored beforehand for every backend server
> host. Then I need to use the same session with the backend server to
> execute further requests to the backend server that would come from the
> client(browser). 
> 
> Since I need to do such a thing with many backend servers, do you think
> it is possible to do with a Single HttpClient instance? Can a single
> HttpClient instance maintain login sessions with multiple backend
> servers at the same time?

HTTP state is maintained based on the content of HTTP messages (usually using
cookies). With a few exceptions HTTP connections are usually state-less.


> Also, other parameters like Timeout periods, cookie policy etc. could
> vary from host to host. 
> These were the reasons that prompted me to go with a one HttpClient per
> host approach to make things cleaner and less complex.
> 

HTTP parameters can also be set on a per request basis. One does not have to
have different HttpClient instances just to maintain a different set of HTTP
parameters.


> Do you think I could still make it work with a single http client
> instance?

I believe so. You could also use multiple HttpClient instances sharing a single
connection manager instance.

Oleg


> Please advise what you think.
> 
> Thanks,
> Brijesh
> 
> 
> 
> -----Original Message-----
> From: Oleg Kalnichevski [mailto:[email protected]] 
> Sent: Monday, August 17, 2009 3:08 PM
> To: HttpClient User Discussion
> Subject: [Junk released by Allow List] Re: MaxTotalConnections and
> MaxConnectionPerRoute in case ofhttpclient instance per target host
> 
> On Mon, Aug 17, 2009 at 12:37:37AM +0530, Brijesh Deo wrote:
> > Hi,
> > 
> >  
> > 
> > I am implementing an http reverse proxy, somewhat on the lines of the
> > sample implementation - ElementalReverseProxy with some modifications.
> I
> > am using HttpCore classes to implement the http server (using
> > org.apache.http.protocol.HttpService) and the HttpClient api (instead
> of
> > the HttpRequestExecutor) to implement the client side for sending the
> > Http requests to the target servers and receiving Http Responses from
> > them. I am using the latest HttpClient 4.0 binaries bundle (with
> > dependencies).
> > 
> >  
> > 
> > I need to provide access to several backend http web-servers through
> my
> > reverse proxy. For that, I am creating one HttpClient instance per
> > backend host and all requests targeted to a particular target host are
> > executed using the corresponding httpClient instance. Every httpClient
> > instance uses separate instances of ThreadSafeClientConnManager. Every
> > HttpClient-ThreadSafeClientConnManager pair has MaxTotalConnections =
> 20
> > and MaxConnectionsPerRoute = 10.
> > 
> > 
> 
> I personally see no benefit of having multiple HttpClient /
> ConnectionManager,
> (a pair per target host). A single HttpClient instance with
> ThreadSafeClientConnManager would do the job just as well.
> 
>  
> > 
> > With respect to this I have the following questions:
> > 
> >  
> > 
> > 1) Since I have one HttpClient-ThreadSafeClientConnManager instances
> > pair for one target host, can there be multiple routes (HttpRoute) to
> > the same target server while executing requests from the HttpClient?
> Or
> > would there be only one route to a given target host in this case?
> > 
> > 
> 
> Only one route, provide you do not use different proxies to access the
> same
> target host.
> 
>  
> > 
> > 2) I have noticed that when multiple threads are executing requests to
> a
> > given target server using the corresponding HttpClient instance, I get
> > ConnectionPoolTimeoutException at times when the no of connections
> > touches MaxConnectionsPerRoute (10) even though the
> MaxTotalConnections
> > is 20. So, do all the connections use the same route in such
> scenarios?
> 
> Apparently, they do
> 
> > Then, in cases like these MaxConnectionsPerRoute becomes the limiting
> > value for the number of allowed connections rather than the
> > MaxTotalConnections. Is this observation correct? 
> > 
> >  
> 
> Yes, it is
> 
> 
> > 
> > 3) In cases like this, do the two parameters MaxTotalConnections and
> > MaxConnectionPerRoute need to have the same value?
> > 
> >  
> 
> No, they do not, but the exact setup depends on particular needs of your
> applications.
> 
> For instance one many want to ensure that there is no more than 10
> connections
> to Host A and no more than 10 connections to Host B, but simultameously
> there
> is no more than 15 connections in total at the same time.
> 
> Oleg
> 
> > 
> > Please help in understanding/ validating this assumption.
> > 
> >  
> > 
> > Thanks,
> > 
> > Brijesh
> > 
> 
> ---------------------------------------------------------------------
> 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