首页 > 解决方案 > 使用 OkHttp 没有并发(网络调用按顺序执行)

问题描述

com.squareup.okhttp3:okhttp:4.9.1在 Java Android 应用程序中使用 OkHttp ( )。

我的假设是可以使用OkHttpClient. 然而,情况似乎并非如此——这些调用对我来说是按顺序执行的。

这是我的设置:

Dispatcher dispatcher = new Dispatcher();

// for an unclear reason this sill does not allow concurrent calls
dispatcher.setMaxRequestsPerHost(32);

OkHttpClient httpClient = new OkHttpClient.Builder()
    .addInterceptor(
        new HttpLoggingInterceptor(s -> Log.d("KeyValueStorage", s))
            .setLevel(HttpLoggingInterceptor.Level.BODY)
    )
    .eventListenerFactory(new LoggingEventListener.Factory())
    .connectTimeout(10, TimeUnit.SECONDS)
    .readTimeout(10, TimeUnit.SECONDS)
    .writeTimeout(10, TimeUnit.SECONDS)
    .dispatcher(dispatcher)
    .build();

以下是日志:

2021-04-30 18:20:51.945 11761-11865/com.my.app I/okhttp.OkHttpClient: [0 ms] callStart: Request{method=HEAD, url=https://www.wroclaw.pl/get/me/a_0}
2021-04-30 18:20:51.945 11761-11868/com.my.app I/okhttp.OkHttpClient: [0 ms] callStart: Request{method=HEAD, url=https://www.wroclaw.pl/get/me/d_0}
2021-04-30 18:20:51.945 11761-11867/com.my.app I/okhttp.OkHttpClient: [0 ms] callStart: Request{method=HEAD, url=https://www.wroclaw.pl/get/me/c_0}

2021-04-30 18:20:51.954 11761-11867/com.my.app D/KeyValueStorage: --> HEAD https://www.wroclaw.pl/get/me/c_0
2021-04-30 18:20:51.955 11761-11867/com.my.app D/KeyValueStorage: --> END HEAD
2021-04-30 18:20:51.962 11761-11867/com.my.app I/okhttp.OkHttpClient: [17 ms] proxySelectStart: https://www.wroclaw.pl/
2021-04-30 18:20:51.966 11761-11867/com.my.app I/okhttp.OkHttpClient: [21 ms] proxySelectEnd: [DIRECT]
2021-04-30 18:20:51.966 11761-11867/com.my.app I/okhttp.OkHttpClient: [21 ms] dnsStart: www.wroclaw.pl
2021-04-30 18:20:52.056 11761-11867/com.my.app I/okhttp.OkHttpClient: [111 ms] dnsEnd: [www.wroclaw.pl/46.248.189.3]
2021-04-30 18:20:52.060 11761-11867/com.my.app I/okhttp.OkHttpClient: [114 ms] connectStart: www.wroclaw.pl/46.248.189.3:443 DIRECT
2021-04-30 18:20:52.081 11761-11867/com.my.app I/okhttp.OkHttpClient: [136 ms] secureConnectStart
2021-04-30 18:20:52.401 11761-11867/com.my.app I/okhttp.OkHttpClient: [456 ms] secureConnectEnd: Handshake{tlsVersion=TLS_1_2 cipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 peerCertificates=[CN=www.wroclaw.pl, OU=IT, O=Gmina Wroclaw, L=Wrocław, C=PL, SERIALNUMBER=931934839, OID.1.3.6.1.4.1.311.60.2.1.3=PL, OID.2.5.4.15=Government Entity, CN=DigiCert SHA2 Extended Validation Server CA, OU=www.digicert.com, O=DigiCert Inc, C=US, CN=DigiCert High Assurance EV Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US] localCertificates=[]}
2021-04-30 18:20:52.401 11761-11867/com.my.app I/okhttp.OkHttpClient: [456 ms] connectEnd: http/1.1
2021-04-30 18:20:52.403 11761-11867/com.my.app I/okhttp.OkHttpClient: [458 ms] connectionAcquired: Connection{www.wroclaw.pl:443, proxy=DIRECT hostAddress=www.wroclaw.pl/46.248.189.3:443 cipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 protocol=http/1.1}
2021-04-30 18:20:52.404 11761-11867/com.my.app I/okhttp.OkHttpClient: [459 ms] requestHeadersStart
2021-04-30 18:20:52.405 11761-11867/com.my.app I/okhttp.OkHttpClient: [461 ms] requestHeadersEnd
2021-04-30 18:20:53.721 11761-11867/com.my.app I/okhttp.OkHttpClient: [1775 ms] responseHeadersStart
2021-04-30 18:20:53.722 11761-11867/com.my.app I/okhttp.OkHttpClient: [1777 ms] responseHeadersEnd: Response{protocol=http/1.1, code=200, message=OK, url=https://www.wroclaw.pl/get/me/c_0}
2021-04-30 18:20:53.725 11761-11867/com.my.app I/okhttp.OkHttpClient: [1779 ms] responseBodyStart
2021-04-30 18:20:53.725 11761-11867/com.my.app I/okhttp.OkHttpClient: [1780 ms] responseBodyEnd: byteCount=0
2021-04-30 18:20:53.728 11761-11867/com.my.app D/KeyValueStorage: <-- 200 OK https://www.wroclaw.pl/get/me/c_0 (1772ms)
2021-04-30 18:20:53.728 11761-11867/com.my.app D/KeyValueStorage: Server: nginx
2021-04-30 18:20:53.729 11761-11867/com.my.app D/KeyValueStorage: Date: Fri, 30 Apr 2021 16:21:20 GMT
2021-04-30 18:20:53.729 11761-11867/com.my.app D/KeyValueStorage: Content-Type: text/html
2021-04-30 18:20:53.729 11761-11867/com.my.app D/KeyValueStorage: Connection: keep-alive
2021-04-30 18:20:53.729 11761-11867/com.my.app D/KeyValueStorage: Vary: Accept-Encoding
2021-04-30 18:20:53.729 11761-11867/com.my.app D/KeyValueStorage: Set-Cookie: CUMULUS=1; Path=/
2021-04-30 18:20:53.730 11761-11867/com.my.app D/KeyValueStorage: Set-Cookie: JSESSIONID=250CD2E947A8A542D615C8BAB4D45717; Path=/
2021-04-30 18:20:53.730 11761-11867/com.my.app D/KeyValueStorage: Content-Encoding: gzip
2021-04-30 18:20:53.730 11761-11867/com.my.app D/KeyValueStorage: <-- END HTTP
2021-04-30 18:20:53.731 11761-11867/com.my.app I/okhttp.OkHttpClient: [1786 ms] connectionReleased
2021-04-30 18:20:53.732 11761-11867/com.my.app I/okhttp.OkHttpClient: [1787 ms] callEnd

2021-04-30 18:20:53.747 11761-11865/com.my.app D/KeyValueStorage: --> HEAD https://www.wroclaw.pl/get/me/a_0
2021-04-30 18:20:53.747 11761-11865/com.my.app D/KeyValueStorage: --> END HEAD
2021-04-30 18:20:53.761 11761-11865/com.my.app I/okhttp.OkHttpClient: [1816 ms] connectionAcquired: Connection{www.wroclaw.pl:443, proxy=DIRECT hostAddress=www.wroclaw.pl/46.248.189.3:443 cipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 protocol=http/1.1}
2021-04-30 18:20:53.763 11761-11865/com.my.app I/okhttp.OkHttpClient: [1818 ms] requestHeadersStart
2021-04-30 18:20:53.767 11761-11865/com.my.app I/okhttp.OkHttpClient: [1822 ms] requestHeadersEnd
2021-04-30 18:20:54.974 11761-11865/com.my.app I/okhttp.OkHttpClient: [3028 ms] responseHeadersStart
2021-04-30 18:20:54.977 11761-11865/com.my.app I/okhttp.OkHttpClient: [3032 ms] responseHeadersEnd: Response{protocol=http/1.1, code=200, message=OK, url=https://www.wroclaw.pl/get/me/a_0}
2021-04-30 18:20:54.981 11761-11865/com.my.app I/okhttp.OkHttpClient: [3035 ms] responseBodyStart
2021-04-30 18:20:54.983 11761-11865/com.my.app I/okhttp.OkHttpClient: [3037 ms] responseBodyEnd: byteCount=0
2021-04-30 18:20:54.987 11761-11865/com.my.app D/KeyValueStorage: <-- 200 OK https://www.wroclaw.pl/get/me/a_0 (1238ms)
2021-04-30 18:20:54.987 11761-11865/com.my.app D/KeyValueStorage: Server: nginx
2021-04-30 18:20:54.987 11761-11865/com.my.app D/KeyValueStorage: Date: Fri, 30 Apr 2021 16:21:22 GMT
2021-04-30 18:20:54.987 11761-11865/com.my.app D/KeyValueStorage: Content-Type: text/html
2021-04-30 18:20:54.987 11761-11865/com.my.app D/KeyValueStorage: Connection: keep-alive
2021-04-30 18:20:54.988 11761-11865/com.my.app D/KeyValueStorage: Vary: Accept-Encoding
2021-04-30 18:20:54.988 11761-11865/com.my.app D/KeyValueStorage: Set-Cookie: CUMULUS=1; Path=/
2021-04-30 18:20:54.988 11761-11865/com.my.app D/KeyValueStorage: Set-Cookie: JSESSIONID=0E4D51CDE5F7E91AB5D773973CEBE7A8; Path=/
2021-04-30 18:20:54.988 11761-11865/com.my.app D/KeyValueStorage: Content-Encoding: gzip
2021-04-30 18:20:54.988 11761-11865/com.my.app D/KeyValueStorage: <-- END HTTP
2021-04-30 18:20:54.991 11761-11865/com.my.app I/okhttp.OkHttpClient: [3045 ms] connectionReleased
2021-04-30 18:20:54.992 11761-11865/com.my.app I/okhttp.OkHttpClient: [3047 ms] callEnd

2021-04-30 18:20:55.002 11761-11868/com.my.app D/KeyValueStorage: --> HEAD https://www.wroclaw.pl/get/me/d_0
2021-04-30 18:20:55.002 11761-11868/com.my.app D/KeyValueStorage: --> END HEAD
2021-04-30 18:20:55.011 11761-11868/com.my.app I/okhttp.OkHttpClient: [3066 ms] connectionAcquired: Connection{www.wroclaw.pl:443, proxy=DIRECT hostAddress=www.wroclaw.pl/46.248.189.3:443 cipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 protocol=http/1.1}
2021-04-30 18:20:55.013 11761-11868/com.my.app I/okhttp.OkHttpClient: [3067 ms] requestHeadersStart
2021-04-30 18:20:55.017 11761-11868/com.my.app I/okhttp.OkHttpClient: [3071 ms] requestHeadersEnd
2021-04-30 18:20:56.203 11761-11868/com.my.app I/okhttp.OkHttpClient: [4257 ms] responseHeadersStart
2021-04-30 18:20:56.207 11761-11868/com.my.app I/okhttp.OkHttpClient: [4260 ms] responseHeadersEnd: Response{protocol=http/1.1, code=200, message=OK, url=https://www.wroclaw.pl/get/me/d_0}
2021-04-30 18:20:56.211 11761-11868/com.my.app I/okhttp.OkHttpClient: [4265 ms] responseBodyStart
2021-04-30 18:20:56.212 11761-11868/com.my.app I/okhttp.OkHttpClient: [4266 ms] responseBodyEnd: byteCount=0
2021-04-30 18:20:56.218 11761-11868/com.my.app D/KeyValueStorage: <-- 200 OK https://www.wroclaw.pl/get/me/d_0 (1214ms)
2021-04-30 18:20:56.218 11761-11868/com.my.app D/KeyValueStorage: Server: nginx
2021-04-30 18:20:56.218 11761-11868/com.my.app D/KeyValueStorage: Date: Fri, 30 Apr 2021 16:21:23 GMT
2021-04-30 18:20:56.218 11761-11868/com.my.app D/KeyValueStorage: Content-Type: text/html
2021-04-30 18:20:56.219 11761-11868/com.my.app D/KeyValueStorage: Connection: keep-alive
2021-04-30 18:20:56.219 11761-11868/com.my.app D/KeyValueStorage: Vary: Accept-Encoding
2021-04-30 18:20:56.219 11761-11868/com.my.app D/KeyValueStorage: Set-Cookie: CUMULUS=1; Path=/
2021-04-30 18:20:56.219 11761-11868/com.my.app D/KeyValueStorage: Set-Cookie: JSESSIONID=399BA09A7BD030FE7CA775873C7C7C78; Path=/
2021-04-30 18:20:56.220 11761-11868/com.my.app D/KeyValueStorage: Content-Encoding: gzip
2021-04-30 18:20:56.220 11761-11868/com.my.app D/KeyValueStorage: <-- END HTTP
2021-04-30 18:20:56.224 11761-11868/com.my.app I/okhttp.OkHttpClient: [4276 ms] connectionReleased
2021-04-30 18:20:56.227 11761-11868/com.my.app I/okhttp.OkHttpClient: [4279 ms] callEnd

日志显示了我如何使用相同的OkHttpClient. 令我惊讶的是,它们根本没有交错。

我尝试过的想法(没有成功):

标签: androidnetworkingconcurrencyokhttp

解决方案


推荐阅读