在android中使用http2和okhttp,为什么要为20个请求创建20个流

时间:2017-06-29 04:08:15

标签: android okhttp http2

使用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();
    }

1 个答案:

答案 0 :(得分:0)

答案在于https://github.com/square/okhttp/issues/3442

的讨论

简而言之,当并发请求开始时,还没有可用的tcp通道,所以okhttp为每个请求创建新的tcp通道(20)。在第一个建立后,使用合并机制,其他请求将放弃它创建的tcp通道并使用第一个建立的通道。