Timeout allows limiting the time of the request execution or execution steps such as a connection or a TCP packet awaiting. The following timeout types are available:
By default all these timeouts are infinite and should be explicitly specified when needed. Timeouts could be specified for all requests of a particular client or for a single request.
io.ktor.client.features.HttpTimeout 类中定义,无需任何额外构件。
Request, connect and socket timeouts could be specified for all requests of a particular client it the configuration specified during the feature installation:
val client = HttpClient() {
install(HttpTimeout) {
// timeout config
requestTimeoutMillis = 1000
}
}
Besides that, all timeouts could also be specified for a single request and so that override high-level values:
val client = HttpClient() {
install(HttpTimeout)
}
client.get<String>(url) {
timeout {
// timeout config
requestTimeoutMillis = 5000
}
}
Be aware that to assign per-request timeout it’s still required to have timeout feature installed. In case per-request configuration is specified without installed feature an IllegalArgumentException will be thrown with message “Consider install HttpTimeout feature because request requires it to be installed”.
In case of timeout an exception will be thrown. The type of exception depends on type of occured timeout: HttpRequestTimeoutException in case of request timeout, HttpConnectTimeoutException in case of connect timeout and HttpSocketTimeoutException in case of socket timeout.
Not all client engines support all timeout types. Curl doesn’t support socket timeout, Ios doesn’t support connect timeout and Js supports only request timeout.