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)
方法一:web app server中,如websphere里可以设置超时时间为30分钟。方法二:在web.xml中的session-config配置
session-timeout元素(WEB.XML文件中的元素)用来指定默认的会话超时时间间隔,以分钟为单位。该元素值必须为整数。如果 session-timeout元素的值为零或负数,则表示会话将永远不会超时。如:
<session-config> <session-timeout>30</session-timeout></session-config>//30分钟
方法三:setMaxInactiveInterval设置当前会话时间
setMaxInactiveInterval设置的是当前会话的失效时间,不是整个web的时间,单位为以秒计算。如果设置的值为零或负数,则表示会话将永远不会超时。常用于设置当前会话时间。该优先级要比方法三中的优先级高。
方法四:session中保存一个bean或者map,里面存储上相应的过期时间,一旦过期,remove掉。
方法四可以通过一个线程去扫描,如果时间带了,线程自动清除,或者用的时候进行判断,用过后进行remove,如果使用线程自动remove,可以使用spring的线程池。
第一,ConnectionPoolTimeout:定义了从ConnectionManager管理的连接池中取出连接的超时时间。
出错会抛出ConnectionPoolTimeoutException
第二,ConnectionTimeout:
定义了通过网络与服务器建立连接的超时时间,Httpclient包中通过一个异步线程去创建与服务器的socket连接,这就是该socket连接的超时时间。
当连接HTTP服务器或者等待HttpConnectionManager管理的一个有效连接超时出错会抛出ConnectionTimeoutException
第三,SocketTimeout:
这定义了Socket读数据的超时时间,即从服务器获取响应数据需要等待的时间。
当读取或者接收Socket超时会抛出SocketTimeoutException
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)