Client Plugin
超时
代码示例: client-timeout
HttpTimeout 插件允许您配置以下超时:
- 请求超时 — 处理 HTTP 调用所需的时间段:从发送请求到接收响应。
- 连接超时 — 客户端应与服务器建立连接的时间段。
- Socket 超时 — 在与服务器交换数据时,两个数据包之间最长的不活动时间。
您可以为所有请求或仅为特定请求指定这些超时。
添加依赖项
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 指定在与服务器交换数据时,两个数据包之间最长的不活动时间。
您可以在 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
对特定的引擎有一些限制。下方的表格显示了这些引擎支持哪些超时:
引擎 | 请求超时 | 连接超时 | Socket 超时 |
---|---|---|---|
Darwin | ✅️ | ✖️ | ✅️ |
JavaScript | ✅ | ✖️ | ✖️ |
Curl | ✅ | ✅️ | ✖️ |
MockEngine | ✅ | ✖️ | ✅ |