cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Kulp <>
Subject Re: Async http client experiments....
Date Thu, 02 Aug 2012 18:58:30 GMT
On Wednesday, August 01, 2012 05:58:23 PM Oleg Kalnichevski wrote:
> Hi Daniel
> I believe I have fixed the thread synchronization issue. All tests
> repeatedly passed for me. Could you please have a look at my changes and
> confirm that everything is more or less sane and HTTP transport still
> performs at an acceptable level?

Finally got a chance to look at all the stuff you did.  Awesome work!

> As the next I could optimize the code and hopefully bring its
> performance closer to that of the default blocking transport.
> I also noticed that for some reason additional connections get open and
> closed without transmitting any data, which obviously should not be
> happening. I'll investigate the problem if you confirm that you want me
> to proceed.

Interesting.  I'm actually not seeing that now.  :-)   I ran the testCalls 
things with small and larger requests and in both cases, all 20K requests 
went on a single connection.  Was quite impressed.  (I actually expected the 
Jetty backend to have a limit on number of requests per keepalive as I ran 
into a similar setting in Tomcat last week that defaulted to 100).

I just went through and added a little bit of error handling into it as 
well.   Mostly around a connection refused exception and for read timeouts.   
For the read timeout, I DID have to add an ioct.shutdown() in the 
SharedInBuffer consume method when read or it kept getting called repeatedly 
since we didn't read anything.

Also started working on the resends and such, but haven't yet added a 
testcase for that.  

So, stuff I have left to look at are basically:  (and I've add //FIXME 
comments in the code where I *think* something needs to happen)

1) Proxy support
3) Connection timeouts

CXF allows these to be configured on a per-client (and sometimes even per-
request) basis.    It looks like HC seems to have these on the connection 
factory.  I thought about a new factory per request, but the pool seems to 
be tied to the connection factory  as well and a full pool per request would 
be aweful.   I then wanted to see if I could pass some sort of contextual 
object in (there is that BasicHttpContext object) that I could pull 
information out of at connection time or similar, but I could really figure 
out where that went, at least not until after the IOSession is setup, which 
is too late.   Also thought about a thread local, but that doesn't work with 
the async connection.   

Any ideas on that would be a huge help.  I'll keep digging a bit as well.   
Kind of learning more about the HC stuff and NIO and all kind of things, 
which is kind of fun.   :-)

Daniel Kulp -
Talend Community Coder -

View raw message