我正在使用Retrofit和OkHttpClient在Android上构建Rest API。
前段时间,我注意到api提出的第一个请求总是比其他所有人都要花费更长的时间......开始时我并不关心因为这是一个可以接受的时间。
但是突然间请求时间跳到了60秒
所有这些都是浪费客户端,因为监控服务器我发现处理时间不到1秒......
我想知道我做了什么改变会导致如此高的影响,然后我意识到我改变了OkHttp的连接超时。
我已经将测试值从10秒改为60秒......
我做了一些实验,将connectTimeout设置为许多其他值,并且总是第一个请求在超时时间内高于时间
有谁知道什么可能导致这种奇怪的行为?怎么解决?
PS。我需要在桌面上测试api并且这个问题没有发生,我的意思是它只发生在Android设备上[我试过几个]是什么原因?
您可以在EventListener
中配置OkHttpClient
并使用它来查看时间花费。
https://medium.com/inloopx/okhttp-is-quietly-retrying-requests-is-your-api-ready-19489ef35ace
它可能在前几个请求和超时时失败。 OkHTTP会自动重试。
builder.retryOnConnectionFailure(假);
尝试关闭自动重试,看看会发生什么。
https://www.reddit.com/r/gfycat/comments/5y2dkm/psa_for_android_devs_how_to_work_around_ipv6/
这可能是ipv4 vs ipv6问题。此代码优先考虑ipv4地址。