Client Plugin
タイムアウト
コード例: client-timeout
HttpTimeout プラグインを使用すると、以下のタイムアウトを設定できます。
- リクエストタイムアウト (request timeout) — HTTP コールの処理に必要な期間。リクエストの送信からレスポンスの受信まで。
- 接続タイムアウト (connection timeout) — クライアントがサーバーとの接続を確立するまでの期間。
- ソケットタイムアウト (socket timeout) — サーバーとのデータ交換時における、2つのデータパケット間の最大無通信時間。
これらのタイムアウトは、すべてのリクエストに対して指定することも、特定のリクエストに対してのみ指定することもできます。
依存関係の追加
HttpTimeout は ktor-client-core アーティファクトのみを必要とし、特定の依存関係は必要ありません。
HttpTimeout のインストール
HttpTimeout をインストールするには、クライアント設定ブロック内の install 関数に渡します。
kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.*
//...
val client = HttpClient(CIO) {
install(HttpTimeout)
}タイムアウトの設定
タイムアウトを設定するには、対応するプロパティを使用できます。
- requestTimeoutMillis リクエストの送信からレスポンスの受信まで、HTTP コール全体に対するタイムアウトを指定します。
- connectTimeoutMillis サーバーとの接続を確立するためのタイムアウトを指定します。
- socketTimeoutMillis サーバーとのデータ交換時における、2つのデータパケット間の最大待ち時間を指定します。
install ブロック内ですべてのリクエストに対するタイムアウトを指定できます。以下のコード例は、requestTimeoutMillis を使用してリクエストタイムアウトを設定する方法を示しています。
kotlin
val client = HttpClient(CIO) {
install(HttpTimeout) {
requestTimeoutMillis = 1000
}
}特定のリクエストに対してのみタイムアウトを設定する必要がある場合は、HttpRequestBuilder.timeout プロパティを使用します。
kotlin
val response: HttpResponse = client.get("http://0.0.0.0:8080/path1") {
timeout {
requestTimeoutMillis = 3000
}
}特定のリクエストに指定されたタイムアウトは、install ブロックのグローバルなタイムアウトを上書きすることに注意してください。
タイムアウトが発生した場合、Ktor は HttpRequestTimeoutException、ConnectTimeoutException、または SocketTimeoutException をスローします。
制限事項
HttpTimeout には特定のエンジンに対するいくつかの制限事項があります。以下の表は、それらのエンジンでサポートされているタイムアウトを示しています。
| エンジン | リクエストタイムアウト | 接続タイムアウト | ソケットタイムアウト |
|---|---|---|---|
| Darwin | ✅️ | ✖️ | ✅️ |
| JavaScript | ✅ | ✖️ | ✖️ |
| Curl | ✅ | ✅️ | ✖️ |
| MockEngine | ✅ | ✖️ | ✅ |
