OkHttp3 超时设置

OkHttp3 超时设置,第1张

目录

1,AsyncTimeout

2-1,耗时段介绍「从上往下」

2-2,4个超时设置「OkHttpClient.Builder」

2-3,耗时 *** 作之间的关联

0,参考

okhttp Timeout 超时设置与用法解释: https://www.jianshu.com/p/7547a5e8524a

1,AsyncTimeout

AsyncTimeout.enter 案例

1,首次创建 Watchdog + AsyncTimeout作为static量,避免重复创建

2,单线程,设置超时,通过pine/pip机制,若超时通过写入流方式唤醒

2-1,耗时段介绍「从上往下」

耗时 *** 作调用位置

DNS解析 「ConnectInterceptor」streamAllocation.newStream

「RouteSelector」address.dns().lookup()

连接时间「ConnectInterceptor」streamAllocation.newStream

「Platform」socket.connect()

写入request 「CallServerInterceptor」httpCodec.writeRequestHeaders

服务器响应 「ConnectInterceptor」streamAllocation.newStream

「RealConnection」socket.connect()

读取response 「CallServerInterceptor」httpCodec.readResponseHeaders

2-2,4个超时设置「OkHttpClient.Builder」

api 简介 生效机制

callTimeout() 整个流程耗费的超时时间 RealCall.execute方法,设置进入

AsyncTimeout + WatchDog实现

connectTimeout()三次握手 + SSL建立耗时 socket.connect(address, connectTimeout)

readTimeout() source读取耗时 source.timeout(readTimeout)

AsyncTimeout + WatchDog实现

rawSocket读取耗时 rawSocket.setSoTimeout(readTimeout)

writeTimeout() sink写入耗时sink.timeout(writeTimeout)

AsyncTimeout + WatchDog实现

重点说一下,callTimeout这个参数,网络上很少人使用。这个就是整个网络流程的超时设置。

2-3,耗时 *** 作之间的关联

route.requiresTunnel() callTimeout = dns + connection + readTimeout + readTimeout + writeTimeout + 其它

无 callTimeout = dns + connectTime + readTimeout + 其它

1,基本耗时:dns + 三次握手耗时 + 服务器响应耗时

2,若有渠道,则增加 source.timeout().(readTimeout) + sink.timeout.(writeTimeout)

如果你是要在子线程超时后直接关闭的话可以这样:

exec=Executors.newFixedThreadPool(1)

Callable<String>call = new Callable<String>() {

public String call() throws Exception {

//开始 *** 作

//TimeTaskTest.star(null)

return "线程执行完成"

}

}

Future<String>future = exec.submit(call)

//设置为30分钟超时

future.get(1000*60*time , TimeUnit.MILLISECONDS)

=========================================

如果你是在进行其他 *** 作的话那就比较麻烦了,目前我想到的是在子线程中一直访问某个变量,超时时守护线程改变这个值,然后子线程读到后退出,不过这个有个问题,就是当子线程卡死在某个环节时完全无用


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11008923.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-12
下一篇2023-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存