You are viewing a plain text version of this content. The canonical link for it is here.
Posted to httpclient-users@hc.apache.org by Sujith Joseph <su...@gmail.com> on 2008/04/04 07:22:12 UTC

Http connection management/throttling for various applications sending GET requests to the same web server using a single web service

Hi,
   I am trying to implement a way of throttling http connections to a web
server from a web service, using httpclient, so that the web server wouldn't
be overloaded with more than 'x' concurrent connections, from my web
service. (I also need to ensure that the http connections available in the
pool are utilized efficiently).

Within the web service, the http connections are created for various types
of (client) applications and each such application has a preferred limit on
the number of concurrent connections, it can create to the server. However
if the connections requested by a particular application gets higher than
its preferred limit, it could consume free http connections allocated to
other applications. The thus eagerly acquired connections must be released,
if the rest of the applications requests back for their allotted
connections.


To implement this, I am thinking of using a custom object pool of
SimpleHttpConnectionManager objects for each of the applications and have a
logic to maintain and regulate the number of these objects allocated/used,
based on the load, during new connection requests. For each web server
request, the plan is to create a connection from the
SimpleHttpConnectionManager using a HttpClient and release it, after getting
a response.

Can someone help me with a better solution for this? I know that the
MultiTHreadedConnectionManager keeps a pool of connections, but I am not
sure, whether we can dynamically manipulate the max connections to a host,
after an MTCM object creation (My understanding on MTCM is that it creates
as many threads as the max connection limit on its creation). Is there
something in Httpclient4.x that might help me in this? I am also thinking of
a custom implementation of the HttpConnectionManager for this. Please
advise.


Thanks,
Sujith

Re: Http connection management/throttling for various applications sending GET requests to the same web server using a single web service

Posted by Sujith Joseph <su...@gmail.com>.
Hi Oleg,
           Thanks a lot for your advice.
Thanks,
Sujith

On Sun, Apr 6, 2008 at 3:49 AM, Oleg Kalnichevski <ol...@apache.org> wrote:

>
> On Thu, 2008-04-03 at 22:22 -0700, Sujith Joseph wrote:
> > Hi,
> >    I am trying to implement a way of throttling http connections to a
> web
> > server from a web service, using httpclient, so that the web server
> wouldn't
> > be overloaded with more than 'x' concurrent connections, from my web
> > service. (I also need to ensure that the http connections available in
> the
> > pool are utilized efficiently).
> >
> > Within the web service, the http connections are created for various
> types
> > of (client) applications and each such application has a preferred limit
> on
> > the number of concurrent connections, it can create to the server.
> However
> > if the connections requested by a particular application gets higher
> than
> > its preferred limit, it could consume free http connections allocated to
> > other applications. The thus eagerly acquired connections must be
> released,
> > if the rest of the applications requests back for their allotted
> > connections.
> >
> >
> > To implement this, I am thinking of using a custom object pool of
> > SimpleHttpConnectionManager objects for each of the applications and
> have a
> > logic to maintain and regulate the number of these objects
> allocated/used,
> > based on the load, during new connection requests. For each web server
> > request, the plan is to create a connection from the
> > SimpleHttpConnectionManager using a HttpClient and release it, after
> getting
> > a response.
> >
>
> Sujith,
>
> SimpleHttpConnectionManager holds only one connection object. There is
> no benefit in pooling SCM instances. You can as well maintain a pool of
> HTTP connections.
>
> > Can someone help me with a better solution for this? I know that the
> > MultiTHreadedConnectionManager keeps a pool of connections, but I am not
> > sure, whether we can dynamically manipulate the max connections to a
> host,
> > after an MTCM object creation (My understanding on MTCM is that it
> creates
> > as many threads as the max connection limit on its creation). Is there
> > something in Httpclient4.x that might help me in this?
>
> HttpClient 4.x API is much, much more modular and flexible. You'll need
> to write a lot less custom code.
>
>
> >  I am also thinking of
> > a custom implementation of the HttpConnectionManager for this. Please
> > advise.
> >
>
> I do not see a way around writing a custom connection manager, which is
> not an easy task.
>
> Oleg
>
> >
> > Thanks,
> > Sujith
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>
>

Re: Http connection management/throttling for various applications sending GET requests to the same web server using a single web service

Posted by Oleg Kalnichevski <ol...@apache.org>.
On Thu, 2008-04-03 at 22:22 -0700, Sujith Joseph wrote:
> Hi,
>    I am trying to implement a way of throttling http connections to a web
> server from a web service, using httpclient, so that the web server wouldn't
> be overloaded with more than 'x' concurrent connections, from my web
> service. (I also need to ensure that the http connections available in the
> pool are utilized efficiently).
> 
> Within the web service, the http connections are created for various types
> of (client) applications and each such application has a preferred limit on
> the number of concurrent connections, it can create to the server. However
> if the connections requested by a particular application gets higher than
> its preferred limit, it could consume free http connections allocated to
> other applications. The thus eagerly acquired connections must be released,
> if the rest of the applications requests back for their allotted
> connections.
> 
> 
> To implement this, I am thinking of using a custom object pool of
> SimpleHttpConnectionManager objects for each of the applications and have a
> logic to maintain and regulate the number of these objects allocated/used,
> based on the load, during new connection requests. For each web server
> request, the plan is to create a connection from the
> SimpleHttpConnectionManager using a HttpClient and release it, after getting
> a response.
> 

Sujith,

SimpleHttpConnectionManager holds only one connection object. There is
no benefit in pooling SCM instances. You can as well maintain a pool of
HTTP connections. 

> Can someone help me with a better solution for this? I know that the
> MultiTHreadedConnectionManager keeps a pool of connections, but I am not
> sure, whether we can dynamically manipulate the max connections to a host,
> after an MTCM object creation (My understanding on MTCM is that it creates
> as many threads as the max connection limit on its creation). Is there
> something in Httpclient4.x that might help me in this?

HttpClient 4.x API is much, much more modular and flexible. You'll need
to write a lot less custom code. 


>  I am also thinking of
> a custom implementation of the HttpConnectionManager for this. Please
> advise.
> 

I do not see a way around writing a custom connection manager, which is
not an easy task.

Oleg

> 
> Thanks,
> Sujith


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