ApacheのHttpClientを使う際に、以下の3つのタイムアウト値(ミリ秒)を設定できるものの、違いをよくわかっていなかったので自分なりにまとめてみた。
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(30000)
.setConnectionRequestTimeout(30000)
.setSocketTimeout(30000)
.build();
HttpClient httpClient = HttpClients.custom()
.setDefaultRequestConfig(config)
.build();
#ConnetionTimeout
サーバーへの接続要求を送信して、接続が確立されたとレスポンスを受け取るまでのタイムアウト値。
要するに3ウェイハンドシェイクでコネクションが確立するまでに許容する時間を設定する。
#ConnectionRequestTimeout
上記の接続が完了した後、サーバーへリクエストを送ってレスポンスが返ってくるまでのタイムアウト値。
#SocketTimeut
ソケット通信の監視に使われるタイムアウト値。
ソケット通信では継続的にパケットを受信するが、受信間隔がこの値以上が開いた場合はタイムアウト(=SocketTimeoutException)となる。