【发布时间】:2017-12-02 15:03:48
【问题描述】:
使用okhttp 3.8.1
我使用 okhttp http2 使用具有相同 okhttpclient 的多个线程同时请求 20 张相同的图片。
我使用 tcp dump 来捕获流量。发现还有 20 个 tcp 流,其中一个大得多,另外 19 个小一些。
我的问题是这 19 个流的用途。还是我以错误的方式使用 ok http?
up down count
2510 56320 1
352 3492 19
我的代码是这样的
OkHttpClient client = builder.build();
for (int i = 0; i < urls.length; i++) {
runTest(urls[i], client);
}
...
private void runTest(...)
new Thread(new Runnable() {
@Override
public void run() {
Request request = new Request.Builder()
.url(url)
.build();
try {
Response response = client.newCall(request).execute();
result = response.body().string();
} catch (IOException e) {
}
}
}
}).start();
}
【问题讨论】:
-
你能想到“runTest(urls[i], client);”结果?
-
@Sree 我记得 okhttp 建议对不同的请求使用相同的客户端?没有?
-
@Sree 对不起,还是没明白你的意思。但是 OkHttpClient 的文档说“应该共享 OkHttpClients OkHttp 在您创建单个 OkHttpClient 实例并将其重用于所有 HTTP 调用时性能最佳。”
-
我只能在这里猜测,您可以通过查看 tcp 转储来验证这一点。一个连接实际加载图像,其他连接只会检查缓存的版本是否仍然是最新的。