Client Plugin
タイムアウト
コード例: client-timeout
HttpTimeoutプラグインを使用すると、以下のタイムアウトを設定できます。
- リクエストタイムアウト — HTTP呼び出しの処理に必要な期間(リクエストの送信からレスポンスの受信まで)。
- コネクションタイムアウト — クライアントがサーバーとの接続を確立すべき期間。
- ソケットタイムアウト — サーバーとのデータ交換中に、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 | ✅ | ✖️ | ✅ |