java - 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 个请求?还是有软件或硬件限制阻止了这种情况?
我将不胜感激任何答案或想法。
问候, 彼得
解决方案
您每秒收到大约 45 个请求的事实可能意味着这是硬件限制。此外,AROUND 可能是由于网络连接或相同性质的原因。
推荐阅读
- arrays - 基于数组中的最大数量迭代的算法的复杂性?
- libreoffice - libreoffice 立即退出 - 在 Ubuntu Linux 上
- c# - 是否可以使 json 反序列化与分配值的枚举一起使用?
- selenium - 如果基于 selenium 机器人框架中的元素可见性条件,如何运行 if else 条件?
- java - 时间戳格式必须为 yyyy-mm-dd hh:mm:ss[.fffffffff]
- python - Python:os.getcwd() 在挂载的网络驱动器中随机失败
- r - 安装未加载对象的 xlsx 包时出错
- django - 无法使用 Docker exec 运行 Django 管理命令
- csv - WEKA 中的无效流标头错误 - CSV 加载
- javascript - 如何在 VS 代码中的 JavaScript 字符串中语法高亮 HTML?