android - 使用 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
. 令我惊讶的是,它们根本没有交错。
我尝试过的想法(没有成功):
- 注意,HTTP 协议是 HTTP/1.1。所以我也尝试了使用 HTTP2 的服务器。
- 尝试了不同的安卓设备。
- 尝试了 Wi-Fi 和蜂窝网络。
- 尝试使用
OkHttp
Dispatcher
固定的 16 线程池执行器的自定义。
解决方案
推荐阅读
- python - 如何绘制多模型的计算时间?
- python - 从图像中去除“噪声”或“孔洞”
- react-native - 管理依赖于道具的样式的最佳方法是什么?
- javascript - 数据表自定义过滤器可在单击按钮时删除具有重复数据的行
- c# - 将 .net Framework 4.5 MVC 应用程序重定向到 /authorize Microsoft Oauth 2.0 端点以检索授权代码
- android - 当运行 ionic cordova run android 时,命令提示符上显示 tranformclasses 错误
- django - 将生产 Django 服务器 + Postgres 数据库复制到相同的 Linode 服务器作为备份
- arrays - 使用 .each 将数组转换为哈希数组
- python - Python从循环中的数据框创建字典
- javascript - 获取javascript中选定选项的值