0

サーバーおよびクライアントとしてRESTletを使用しています。サーバーはTomcat上で実行されており、ブラウザーからアクセスできます。

クライアントには、org.restlet.resource.ClientResourceを使用しています。そのサーバーにいくつかのリクエストを送信すると正常に機能しますが、数百の呼び出しを送信すると機能しなくなります。

Fev 20, 2013 12:59:43 PM org.restlet.engine.connector.ClientConnectionHelper start
INFO: Starting the internal [HTTP/1.1] client
(some calls work)
Fev 20, 2013 1:00:49 PM org.restlet.util.SelectionRegistration block
WARNING: The thread blocked at the cyclic barrier has timed out
java.util.concurrent.TimeoutException
    at java.util.concurrent.CyclicBarrier.dowait(CyclicBarrier.java:250)
    at java.util.concurrent.CyclicBarrier.await(CyclicBarrier.java:427)
    at org.restlet.util.SelectionRegistration.block(SelectionRegistration.java:191)
    at org.restlet.engine.io.NbChannelInputStream.onFill(NbChannelInputStream.java:230)
    at org.restlet.engine.io.Buffer.process(Buffer.java:601)
    at org.restlet.engine.io.NbChannelInputStream.read(NbChannelInputStream.java:307)
    at java.io.InputStream.read(InputStream.java:101)
    at org.restlet.engine.io.BioUtils.copy(BioUtils.java:80)
    at org.restlet.engine.io.NioUtils.copy(NioUtils.java:147)
    at org.restlet.representation.ReadableRepresentation.write(ReadableRepresentation.java:104)
    at org.restlet.representation.ChannelRepresentation.write(ChannelRepresentation.java:76)
    at org.restlet.representation.ChannelRepresentation.write(ChannelRepresentation.java:82)

Exception in thread "main" java.io.IOException: The thread blocked at the cyclic barrier has timed out.
    at org.restlet.util.SelectionRegistration.block(SelectionRegistration.java:197)
    at org.restlet.engine.io.NbChannelInputStream.onFill(NbChannelInputStream.java:230)
    at org.restlet.engine.io.Buffer.process(Buffer.java:601)
    at org.restlet.engine.io.NbChannelInputStream.read(NbChannelInputStream.java:307)
    at java.io.InputStream.read(InputStream.java:101)
    at org.restlet.engine.io.BioUtils.copy(BioUtils.java:80)
    at org.restlet.engine.io.NioUtils.copy(NioUtils.java:147)
    at org.restlet.representation.ReadableRepresentation.write(ReadableRepresentation.java:104)
    at org.restlet.representation.ChannelRepresentation.write(ChannelRepresentation.java:76)
    at org.restlet.representation.ChannelRepresentation.write(ChannelRepresentation.java:82)
Caused by: java.util.concurrent.TimeoutException
    at java.util.concurrent.CyclicBarrier.dowait(CyclicBarrier.java:250)
    at java.util.concurrent.CyclicBarrier.await(CyclicBarrier.java:427)
    at org.restlet.util.SelectionRegistration.block(SelectionRegistration.java:191)
    ... 11 more

Apache HTTPクライアントを使用してより多くの呼び出しを実行できるようにしたいのですが、接続方法に関するドキュメントが見つかりません。

4

2 に答える 2

1

同じ問題が発生しましたが、稼働中の本番マシンでサーバーがCPUを100%消費していました。restlet 2.1.0の代わりに使用することに戻ることで、それを解決することができました2.1.2。根本的な問題に対する実際の答えではありませんが、間違いなく解決策です。

于 2013-04-05T03:07:21.727 に答える
0

すべての証拠は、このエラーがRESTletクライアントの内部にあることを示しています。それを使用する代わりに、を使用しました。これURL.getInputStream()により、RESTletサーバーに対して10Kの順次呼び出しを簡単に行うことができました。もちろん、URLは非常に単純で、エラーを処理できないため、本番環境で使用するべきではありませんが、RESTletには価値がないことが証明されました。

また、Axis2とRESTletをサーバーとして比較するベンチマークを作成することもできました。リクエストに応答するのに3〜5ミリ秒かかる同じパフォーマンスでしたが、RESTの方が高速であると期待していました...サーブレットから直接RESTサーバーを実装しました。応答するミリ秒。そのため、RESTを削除してSOAP Axis2を使用することにしました。これは、RESTletよりも遅くはなく、サーブレットよりもわずか数ミリ秒遅くなりますが、はるかに柔軟で強力です。

于 2013-02-24T16:28:12.773 に答える