Could anyone explain to me why there are only 5 re...
# ktor
g
Could anyone explain to me why there are only 5 requests executed in parallel here? (expected 7)
Copy code
suspend fun main() {
    val server = embeddedServer(Netty, port = 8099) {
        routing {
            route("/") {
                getAndReportMetrics("/test") {
                    println("received a request")
                    delay(5000)
                    it.respondText { "test" }
                }
            }
        }

        addCallMetrics()
    }.start()

    val client = createHttpClient()
    (1..7).map {
        println("Sending $it request")
        GlobalScope.async {
            client.get<HttpResponse>("<http://localhost:8099/test>")
        }
    }.awaitAll()
}
Copy code
fun createHttpClient(
    socketTimeoutMs: Long = 30_000,
    connectionTimeoutMs: Long = 30_000,
    connectionRequestTimeoutMs: Long = 30_000
): HttpClient {
    return HttpClient(OkHttp) {
        install(HttpTimeout) {
            connectTimeoutMillis = connectionTimeoutMs
            requestTimeoutMillis = connectionRequestTimeoutMs
            socketTimeoutMillis = socketTimeoutMs
        }
        engine {
            config {
                // <https://github.com/ktorio/ktor/issues/1708>
                retryOnConnectionFailure(true)
            }
        }
        expectSuccess = false
    }
}
using ktor 1.3.2
g
right, OkHttp has own dispatcher, 5 connection per host by default
g
yep, can confirm, this solved it
Copy code
fun createHttpClient(
    socketTimeoutMs: Long = 30_000,
    connectionTimeoutMs: Long = 30_000,
    connectionRequestTimeoutMs: Long = 30_000
): HttpClient {
    val dispatcher = Dispatcher()
    dispatcher.maxRequests = 100
    dispatcher.maxRequestsPerHost = 10
    val client = OkHttpClient.Builder()
        .dispatcher(dispatcher)
        .build()
    return HttpClient(OkHttp) {
        install(HttpTimeout) {
            connectTimeoutMillis = connectionTimeoutMs
            requestTimeoutMillis = connectionRequestTimeoutMs
            socketTimeoutMillis = socketTimeoutMs
        }
        engine {
            config {
                // <https://github.com/ktorio/ktor/issues/1708>
                retryOnConnectionFailure(true)
                preconfigured = client
            }
        }
        expectSuccess = false
    }
}