Sorry, to insist but I have tried all that (new Client object, etc.).
The maximum number of connection per host is the one I have set. This is
why I though the problem could maybe come from the server side.
Thx again for your help
Hélia
Rob Heittman a écrit :
If you haven't already, you could check the diagnosis by just creating
a new Client object within each of your resources that is doing the
recursive calling. While this might be wasteful, it should at least
rule out some other cause of the trouble. Approximately how many
recursions are you trying to achieve? I didn't see a unit test in
Restlet already that verifies proper working of the max connections
property (though maybe I missed it), but using your pattern, we could
write one that verifies the scale you're trying to get to.
Following the guidance in:
http://www.restlet.org/documentation/1.0/connectors#httpclient
http://www.restlet.org/documentation/1.0/ext/com/noelios/restlet/ext/httpclient/HttpClientHelper.html
... here's how I think the setting is supposed to work ...
Client client = new Client(Protocol.HTTP);
client.getContext().getParameters().set("maxConnectionsPerHost","20");
// or a suitably large number
- Rob
On Tue, Jun 3, 2008 at 11:14 AM, Hélia Pouyllau
<[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> wrote:
Hi Rob
Thank you for this detailed answer. I've just read the part of the
RFC you mentionned : "A single-user client SHOULD NOT maintain
more than 2 connections with any server or proxy". I did not know
that.
I have just tried to set a different number using an Apache
HttpClient and the methods
getParams().setDefaultMaxConnectionsPerHost() of its manager but
the problem still persists.
I find that strange that this problem is only related to the
client side. Is there nothing to parameterized on the server side
to allow more than 2 connections from the same end-user ? How to
allow them with restlet classes ?
Thx
Hélia
Rob Heittman a écrit :
Hi, Hélia --
Jerome's first guess was on target; per RFC 2616 section
8.1.4, clients should by default be configured to allow no
more than 2 concurrent connections to the same host. I know
for-sure that the default in Apache HttpClient is this;
examine the source of
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.
Any client program that respects the RFCs will also respect
this limit by default.
Some implementations treat the connection limit as applying to
a host and port combination, some treat it as applying to the
host specifically. I think this is what you are up against,
since the third call is what blocks.
You can set system properties or pass configuration parameters
to increase the number of connections supported by HttpClient
(or whatever client connector you use), or you can create a
brand new Client object in Restlet within each of your
resources that must make a recursive call. In Restlet 1.1
there are neat features for making internal calls (e.g. the
RIAP protocol,
http://wiki.restlet.org/docs_1.1/45-restlet.html) that might
be interesting as well.
- Rob
Any suggestion to bypass this problem is welcomed and
sorry if
it's a trivial question,
thanks in advance,
hp