2013-11-28 42 views
16

私はhttpの相互作用を実行するためにHTTP Apacheコンポーネントを使用しています。私はhttpクライアントを調整する必要があります。この目的のために、私は2つのパラメータを持っています:接続タイムアウトと接続要求タイムアウト。ライブラリのドキュメントとソースコード(コメントは見つかりませんでした)では、この用語の定義が見つかりませんでした。私は彼らが何を正確に意味するのかを知る必要があります。彼らはHTTPプロトコルのドキュメントで定義されているかもしれませんが、私はそれを見つけることができません。ですから、私の質問は、この2つの用語が意味するものと、それらが互いにどのように区別されるかです。接続と接続要求のタイムアウト

+0

apacheやjavaキーワードなしで検索してみてください。http://en.wikipedia.org/wiki/Timeout_(computing) –

答えて

19

HttpClienthttp://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpClient.html

Connection timeout

に従って接続およびソケットタイムアウト(setConnectionTimeout()setTimeout())を設定する方法を持っているサーバとの接続が確立されるまで、タイムアウトです。

Socket timeoutは、データを受信するタイムアウト(ソケットタイムアウト)です。

例:

たとえば、ブラウザでウェブページにアクセスするとします。サーバーがX秒間に応答しない場合、接続タイムアウトが発生します。しかし、接続を確立すると、サーバーはブラウザの結果を処理し始めます。この処理をY秒間に終了しない場合は、ソケットのタイムアウトが発生します。

+6

返信いただきありがとうございますが、まだ問題があります。ここにリクエスト設定ビルダーhttp://hc.apache.org/httpcomponents-client-4.3.x/httpclient/apidocs/org/apache/http/client/config/RequestConfig.Builder.htmlがあり、3つのメソッドsetConnectionRequestTimeout、setConnectTimeout 、setSocketTimeout(そしてコメントはありません!)だから、私はまだそれぞれのメソッドが何をしているのか、どんなメソッドを使うべきか分かりません。 – mvb13

+18

私は最終的にgetConnectionRequestTimeoutが接続マネージャから接続を要求するときに使用されるimeoutをミリ秒で返すことを発見しました。私は、接続マネージャーはapache-httpcomponentsライブラリークラスだと思うので、私はそれを使用しません。 setConnectionTimeout()とsetTimeout()を使用します。 – mvb13

4

最後に、HttpClient 4.X.Xでは、特定のクライアントであるconnectTimeoutMillisrequestTimeoutMillisをどのように構築するのですか?

HttpClientBuilder clientBuilder = HttpClientBuilder.create(); 
RequestConfig.Builder requestBuilder = RequestConfig.custom(); 
requestBuilder = requestBuilder.setConnectTimeout(connectTimeoutMillis); 
requestBuilder = requestBuilder.setConnectionRequestTimeout(requestTimeoutMillis); 
clientBuilder.setDefaultRequestConfig(requestBuilder.build()); 
CloseableHttpClient httpClient = clientBuilder.build(); 
... 

Btw、このコードのjavadocsは嫌です。 configビルダーの使い方を手で把握してみてください。うんざりする

関連する問題