首页 > 解决方案 > OkHttp 客户端每秒执行的最大可能请求数

问题描述

我正在尝试将 OkHttp 客户端配置为能够每秒发送尽可能多的 HTTP 请求。

我有以下配置:

public static OkHttpClient getInstance() {
    if (instance == null) {
        synchronized (lock) {
            instance = new OkHttpClient.Builder()
                    .addInterceptor(createHttpBodyLoggingInterceptor())
                    .addInterceptor(createHttpBasicLoggingInterceptor())
                    .writeTimeout(10, TimeUnit.SECONDS)
                    .readTimeout(10, TimeUnit.SECONDS)
                    .connectTimeout(10, TimeUnit.SECONDS)
                    .dispatcher(createDispatcher())
                    .connectionPool(createConnectionPool())
                    .build();
        }
    }
    return instance;
}

private static Dispatcher createDispatcher() {
    final Dispatcher dispatcher = new Dispatcher(Executors.newCachedThreadPool());
    dispatcher.setMaxRequests(64);
    dispatcher.setMaxRequestsPerHost(64);
    return dispatcher;
}

private static ConnectionPool createConnectionPool() {
    return new ConnectionPool(64, 10_000, TimeUnit.MILLISECONDS);
}

我有简单的性能/集成测试,它对服务器执行多个异步请求。HTTP 客户端的一个实例正在对同一台机器上的一个 HTTP 服务器实例执行请求。

我知道值 64 是maxRequests. 我试图增加这个值以及其他值(例如maxRequestsPerHost或 中的连接数ConnectionPool),但无论我在这些值之上设置什么(例如 100 或 1000),我每秒只能处理大约 45 个请求。其他请求失败,我得到SocketTimeoutException. 您知道是否可以将 OkHttp 配置为每秒处理超过 45 个请求?还是有软件或硬件限制阻止了这种情况?

我将不胜感激任何答案或想法。

问候, 彼得

标签: javaokhttp

解决方案


您每秒收到大约 45 个请求的事实可能意味着这是硬件限制。此外,AROUND 可能是由于网络连接或相同性质的原因。


推荐阅读