In my project I use a pool of connections in one specific case since I have 
the following situation :
1 Mina Main server gets transactions from outside applications (Mina client) 
or users (Tomcat with a Mina connector).

Application Client makes one shot connection so there is no pool of 
connection.
But in Tomcat (web services), multiple users/threads from Tomcat can access 
to the Mina Main server
through a connection. I've done some benchmark and I saw a big improvement 
using a pool of connection
for Mina connector.
For the implementation, I implement something close to the database pool of 
connection.
The code is quite not clear since it is inside the main project which is 
quite complex, but
if you think it could be useful, I can try to make a proposal of a subset of 
code that helps.
The main idea is at follow :
- One class take the role of the pool of connections (static object in Java) 
as with database pool.
    Upper it, there is an hashmap bind to Mina Main server id (since in my 
app there could be several Mina server
    where Tomcat can connect to). If there is only one server as target, 
this hashmap is unuseful.
    In the pool of connections class, there is a Linked list of connections 
and a counter of initialized connections.
- One class take the role of a superset of Mina connections which includes a 
pointer to the pool of connections.
    The methode close is created to close "virtually" the connection, in 
fact returning it into the linked list.
- When 1 thread (Tomcat user) ask for a connection from the pool, the 
scenario is as the following :
    - if the list is empty, creates one new connection and return it.
    - if the list is not empty, retrieve the first one (removing from the 
list) and check if the connection is still ok
        (using Mina method). If ok, it returns this connection. If not, 
retry from the beginning.
- When 1 thread close the connection, it is simply add to the list.
The counter is used in order to not travel the linked list to count the 
objects stored inside, so as to be efficient.

My benchmark were done with and without this pool. I cannot find right now 
the numbers,
but I remember it was really impressive (almost 5 time faster) under heavy 
load.

Hoping this can help you

And finally for Trustin, my project is under production, at the time beeing 
for a subset only,
and we are waiting for the version 2 too since I saw that I need to change 
quite a bit the code
since last huge work you (all) have done !
So keep the good job done ! Thank you for this great project !

Frederic
----- Original Message ----- 
From: "Vishal_Jain"

Thanks Brad for pointing that out !

am using Mina because what we need is a proxy service and a server interface
(2 connectors tunneling messages and an acceptor which channels data to one
of the connectors .. )

will check out if Jakarta HTTP client can be used for this .. :)

-vishal


Brad Harvey-2 wrote:
>
> Hi Vishal,
>
> If you're talking standard client side HTTP, MINA might not be the best
> tool for the job.  For example, see
> http://jakarta.apache.org/httpcomponents/httpclient-3.x/
>
> One of the features you might be interested in:
> * Connection management support for use in multi-threaded applications.
> Supports setting the maximum total connections as well as the maximum
> connections per host. Detects and closes stale connections.
>
> Trustin mentioned that connection pools are useful when the cost of
> connection is relatively high (eg, SSL handshake).  Another time they
> are useful is when you want to limit the number of connections to the
> server from a multi threaded client.  This is often to conserve
> resources/limit load on the server.
>
> Cheers,
> Brad.
>
> Vishal_Jain wrote:
>> Thanks Trustin !
>>
>> The server i have at my disposal is within the LAN (same subnet) and the
>> connection time i have noticed is about 50ms.
>> My dilemma is to whether accept 50ms as acceptable/reasonable or try
>> something to further reduce this.
>> Purpose is to connect to a HTTP server (tomcat actually) and send/receive
>> requests (socket would close after every transaction); my aim is to keep
>> the
>> system decently scalable with heavy loads (am not sure about how heavy it
>> could get yet).
>>
>> - vishal
>>
>>
>> Trustin Lee wrote:
>>
>>> On 11/6/07, Vishal_Jain <[EMAIL PROTECTED]> wrote:
>>>
>>>> Thats right.
>>>> I was wondering if someone in this forum has implemented a connection
>>>> pool
>>>> (not necessarily around Mina) and perhaps share with rest of newbies
>>>> like
>>>> me
>>>> ? :)
>>>> Another doubt i have is regarding keeping a pool of 'connected'
>>>> sockets.
>>>> How
>>>> useful is it to pull up a already connected socket and do a message
>>>> exchange
>>>> compared to creating and connecting a socket as and when required ?
>>>>
>>> I think it depends on the cost of making a connection.  It's often
>>> very small and once connected, there's no problem with your bandwidth.
>>>  If disconnection is unlikely, you could simply reconnect even if the
>>> connection cost is somewhat high.
>>>
>>> HTH,
>>> Trustin
>>> -- 
>>> what we call human nature is actually human habit
>>> --
>>> http://gleamynode.net/
>>> --
>>> PGP Key ID: 0x0255ECA6
>>>
>>>
>>>
>>
>>
>
>

-- 
View this message in context: 
http://www.nabble.com/Client-Connection-Pool-support-tf4722391s16868.html#a13602821
Sent from the Apache MINA Support Forum mailing list archive at Nabble.com.


Reply via email to