使用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();
}
答案 0 :(得分:0)
答案在于https://github.com/square/okhttp/issues/3442
的讨论简而言之,当并发请求开始时,还没有可用的tcp通道,所以okhttp为每个请求创建新的tcp通道(20)。在第一个建立后,使用合并机制,其他请求将放弃它创建的tcp通道并使用第一个建立的通道。