0

HttpComponents の最新 (4.2.x) リリースの 1 つを考えてみましょう。

のインスタンスが( などの)のインスタンスや のインスタンスにどのようにHttpClient関連しているかを一般的に説明してください。誰が誰について知っていますか?HttpConnectionManagedClientConnectionImplClientConnectionManager

以下、[Http] プレフィックスを省略して引用します。だから、HttpClient- >Client

Clientへの参照を保持していることを理解していますClientConnectionManager。それは、基になるオブジェクトClientへの参照も持っているということですか?Connection

それにリンクされているConnectionManagerすべてについて知っていますか?Clients

HttpGetHttpClient が実行するために使用する は、応答を通じて公開されたストリームについてどのようexecuteに知っていますEntityか? (オブジェクトを呼び出すこと.abort()でストリームを閉じることができるため、これが行われHttpGetます。)HttpGetインスタンスもConnectionオブジェクトにリンクされていますか?

私は混乱しており、上記の質問に答える詳細な概要をいただければ幸いです。例を挙げると、理解が容易になる場合はDefaultHttpClientManagedClientConnectionImpl、 、 などの特定の実装を使用できます。BasicClientConnectionManager

4

1 に答える 1

3

HttpClientリクエスト実行パイプラインへのファサードです。実行パイプラインの正確な構成は、HttpClientインスタンスの構成によって異なります。複数のタブを持つブラウザと考えてください。

1 つ以上のインスタンスが、永続的な接続の基になるプールを共有するHttpClientインスタンスに依存できます。インスタンスは、それらに依存するインスタンスを認識しません。それらは、エンティティが要求したものに接続をリースするだけです。ClientConnectionManagerClientConnectionManagerHttpClient

各リクエストは、特定の 内で実行されますHttpContextHttpContextインスタンスは、実際の HTTP 交換の実行に関与するすべてのステートフル オブジェクトのコレクションです。HttpContextインスタンスはスレッドセーフではなく、複数のワーカー スレッドで共有することはできません。

HTTP 交換を開始すると、関連付けられているからインスタンスがHttpClientリースされます。リクエスト メッセージをシリアル化して反対側のエンドポイントに送信し、レスポンス ヘッドを受信し、レスポンス コンテンツを読み取ることなく、基になる接続をレスポンス インスタンス (利用可能な場合) にバインドします。これにより、HttpResponse インスタンスのコンシューマーは、中間のメモリ内バッファリングなしで応答コンテンツをストリーミングできます。これにより、消費者は、応答に関連付けられたリソース (特に ) を適切に解放する必要があります。ManagedClientConnectionClientConnectionManagerHttpEntityManagedClientConnection

于 2013-05-26T11:17:56.343 に答える