2

マルチスレッド方式でかなりの数 (毎秒複数) の HTTP 操作を実行するために、 のシングルトンインスタンスを使用しています。私のコードは基本的に次のとおりです。DefaultHttpClientPoolingClientConnectionManager

final HttpParams httpClientParams = new BasicHttpParams();
httpClientParams.setParameter("http.protocol.version", HttpVersion.HTTP_1_1);
HttpConnectionParams.setConnectionTimeout(httpClientParams, 700);
HttpConnectionParams.setSoTimeout(httpClientParams, 700);
DefaultHttpClient client = new DefaultHttpClient(poolingClientConnectionManager, httpClientParams);

client次に、複数のスレッドから並行してオブジェクトにアクセスします。

私の問題は、タイムアウトが尊重されず、指定された 700 ミリ秒よりもはるかに長い HTTP 要求があることです。

  • 上記のようにクライアントでタイムアウトを設定しても安全ですか?
  • 多くの並列リクエストに対してDefaultHttpClientのシングルトン インスタンスを使用しても安全ですか?
4

1 に答える 1

2
  • 上記のようにクライアントでタイムアウトを設定しても安全ですか?

はい、安全です。ただし、HttpClient レベルのパラメーターは、すべての要求によって継承される既定の設定を表します。実行時にこれらの設定をいじるべきではありません。一般的には、リクエスト レベルのパラメーターを使用して個々のリクエストを構成することをお勧めします。

  • 多くの並列リクエストに対して DefaultHttpClient のシングルトン インスタンスを使用しても安全ですか?

安全であるだけでなく、強くお勧めします。同じ HttpClient インスタンスを共有することで、永続的な接続の共有プールを再利用することで、個々の要求をより効率的に実行できます。

また、タイムアウトの動作に関する期待が正しいことを確認してください。タイムアウト値は、リクエストの最大合計実行時間ではなく、 2 つの連続する i/o 操作間の非アクティブの最大期間を表します。

于 2012-11-08T10:47:59.930 に答える