改装第一个请求需要确切的OkHttpClient超时

时间:2018-09-25 16:31:39

标签: android retrofit2 connection-pooling okhttp okhttp3

我正在使用Retrofit和OkHttpClient在Android上构建Rest API。

前一段时间,我注意到api发出的第一个请求总是比其他所有请求花费更长的时间...一开始我并不在乎,因为这是可以接受的时间。

但是突然,请求时间跃升至60秒

所有这些时间都是浪费客户端,因为监视服务器我发现处理时间不到1秒...

我想知道所做的更改会导致如此高的影响,然后我意识到我更改了OkHttp的连接超时。

我只是为了测试而将值从10秒更改为60秒...

我做了一些实验,将connectTimeout设置为许多其他值,并且总是第一个请求花费的时间比超时时间长

有人知道什么可能导致这种奇怪的行为吗?该怎么解决?

PS。我需要在台式机上测试api,但没有发生此问题,我的意思是它仅在android设备上发生过(我尝试了几次)是什么原因?

2 个答案:

答案 0 :(得分:0)

您可以在EventListener中配置OkHttpClient,然后使用它来查看时间如何使用。

答案 1 :(得分:0)

https://medium.com/inloopx/okhttp-is-quietly-retrying-requests-is-your-api-ready-19489ef35ace

可能在前几个请求失败并超时。 OkHTTP将自动重试。

builder.retryOnConnectionFailure(false);

尝试关闭自动重试功能,然后看看会发生什么情况。

https://www.reddit.com/r/gfycat/comments/5y2dkm/psa_for_android_devs_how_to_work_around_ipv6/

这可能是ipv4 vs ipv6问题。这段代码优先处理ipv4地址。