5

クライアント側コードの Restlet の構成に行き詰まっています。Restlet 2 と HttpClient 4 を使用しています。拡張 jar と HttpClient jar をビルド パスに追加したところ、動作するようです。

ただし、詳細な設定方法がわかりません。クライアントを手動で作成するのではなくClientResource、対話に s を使用します。これは、Restlet を直接使用する唯一の部分です。クライアントの具体的なインスタンス化は、フレームワークの実装に隠されているようです。クライアントを構成する方法のヒントをいくつか見つけましたが、それらはすべて Restlet 1.x 用に書かれています。

詳細には、次の部分を構成したいと思います。

  • クライアント要求のユーザー エージェントを変更します。clientResource.getClientInfo().setAgent(…)動作しません。
  • ホストあたりの並列接続数を増やします。
  • ホストごとに永続的な接続とプーリングを有効にします。明らかに、これまでの Restlet は ごとに新しい接続を作成していますがClientResource、これはあまり効率的ではありません。

もちろん、私はすでにHttpClientHelperを見てきましたが、これをどこにどのように追加するのかわかりません。すでにドキュメントを検索しましたが、ヒットしませんでした。

手伝ってくれてありがとう!

4

1 に答える 1

4

まず、Restlet が接続に Apache の HttpClient を使用していることを確認するには、クラスパスに org.restlet.ext.httpclient.jar が必要です。Context次に、のコンストラクターにa を渡していますClientResourceか? そうでない場合は、次のことを行う必要があります。

    final Context context = new Context();
    context.getParameters().set("maxConnectionsPerHost", "20");

    final ClientResource requestResource = new ClientResource(context, "http://localhost:8182/request");
    requestResource.getClientInfo().setAgent("Example-Client/1.0");

それはmaxConnectionsPerHostあなたが興味を持っている設定を処理します。また、呼び出しsetAgentは私にとって期待どおりに機能していました。あなたのインスタンスで何が問題なのかわかりません。

永続的な接続に関しては、HttpClient がそれを処理してくれるようです。Restlet は、ここでThreadSafeClientConnManager説明されているHttpClient を利用します。そのリンクでの永続的な接続のサポートについて言及しています。このオブジェクトは、プーリングの問題も解決してくれるようです。これを利用するには、 の同じインスタンスを再利用する必要があります。のスレッド セーフ ポリシーについてはすぐにはわかりませんが、スレッド セーフであることを願っています。ClientResourceClientResource

于 2010-07-18T16:19:35.747 に答える