httpclient设置超时时间 axios默认超时时间-问答-

httpclient设置超时时间 axios默认超时时间

牵着乌龟去散步 问答 1 0

大家好,今天来为大家解答httpclient设置超时时间这个问题的一些问题点,包括axios默认超时时间也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

本文目录

  1. httpclient参数配置
  2. 如何设置连接超时
  3. https请求怎么设置超时时间
  4. OkHttp3 超时设置

一、httpclient参数配置

这里简单解释一下httpclient一些关键参数的配置

默认的话,是从response里头读timeout参数的,没有读到则设置为-1,这个代表无穷,这样设置是有点问题了,如果是https链接的话,则可能会经常报

HTTP规范没有确定一个持久连接可能或应该保持活动多长时间。一些HTTP服务器使用非标准的头部信息Keep-Alive来告诉客户端它们想在服务器端保持连接活动的周期秒数。如果这个信息可用,HttClient就会利用这个它。如果头部信息Keep-Alive在响应中不存在,HttpClient假设连接无限期的保持活动。然而许多现实中的HTTP服务器配置了在特定不活动周期之后丢掉持久连接来保存系统资源,往往这是不通知客户端的。

这里可以在此基础上重写一个,这里设置为5秒

在spring cloud netflix zuul中则提供了类似的定时器,只不过参数是写死的

spring-cloud-netflix-core/1.2.6.RELEASE/spring-cloud-netflix-core-1.2.6.RELEASE-sources.jar!/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java

httpcore-4.4.6-sources.jar!/org/apache/http/pool/PoolEntry.java

httpclient-4.5.3-sources.jar!/org/apache/http/impl/execchain/ConnectionHolder.java

这里设置了validDuration,会传给releaseConnection

httpclient-4.5.3-sources.jar!/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java

这里去updateExpiry,相当于更新了timeToLive

这里设置的是http连接池中connection的存活时间

httpclient-4.5.3-sources.jar!/org/apache/http/impl/client/HttpClientBuilder.java

httpclient-4.5.3-sources.jar!/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java

4.0的ThreadSafeClientConnManager,在4.2版本的时候被废弃了,默认使用PoolingHttpClientConnectionManager。这个manager有两个重要的参数,一个是maxTotal,一个是defaultMaxPerRoute。

httpclient-4.5.3-sources.jar!/org/apache/http/conn/routing/HttpRoute.java

HttpRoute对象是immutable的,包含的数据有目标主机、本地地址、 *** 链、是否tunnulled、是否layered、是否是安全路由。

httpclient设置超时时间 axios默认超时时间-第1张图片-

httpclient-4.5.3-sources.jar!/org/apache/http/impl/client/IdleConnectionEvictor.java

builder默认会构造一个IdleConnectionEvictor

httpclient-4.5.3-sources.jar!/org/apache/http/impl/client/HttpClientBuilder.java

如果没有指定maxIdleTime的话,但是有设置evictExpiredConnections的话,默认是10秒

设置从连接池获取一个连接的请求超时时间(连接池中连接不够用的时候等待超时时间),单位毫秒,可以设置为500ms

httpclient-4.5.3-sources.jar!/org/apache/http/impl/execchain/MainClientExec.java

httpclient-4.5.3-sources.jar!/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java

当getKeepAliveDuration为-1以及connTimeToLive为-1的时候,closeExpiredConnections *** 其实是没有用的,查看debug日志会出现

当getKeepAliveDuration不为-1的话,假设是5s,则日志可能是这样的

二、如何设置连接超时

1、一般来说,ConnectTimeout的设置会根据 *** 环境和应用程序的具体需求而定,通常在几秒到几十秒之间。例如,可以设置ConnectTimeout为10秒或者30秒等。

2、ConnectTimeout主要用来限制建立连接的时间。在 *** 通信中,当尝试连接到一个远程服务器时,由于 *** 延迟、服务器负载过高或其他原因,连接可能会需要一段时间才能完成。ConnectTimeout就是用来设定这个等待时间上限的。如果超过了设定的ConnectTimeout时间,连接尝试就会中断,通常会抛出一个超时异常。

3、例如,在一个Web应用程序中,如果后端服务是通过 *** 调用的,那么ConnectTimeout的设置就很重要。如果设置得太短,可能会因为 *** 波动导致频繁的连接超时;如果设置得太长,则可能会导致用户在等待响应时体验不佳。因此,需要根据实际情况找到一个平衡点。

4、此外,不同的编程语言和框架可能有不同的方式来设置ConnectTimeout。例如,在Java的HttpClient中,可以通过RequestConfig来设置ConnectTimeout;在Python的requests库中,可以在创建Session或者发送请求时通过参数来设置timeout等。因此,在具体设置ConnectTimeout时,还需要参考相关编程语言和框架的文档。

三、https请求怎么设置超时时间

1、HttpParams params= new BasicHttpParams();

2、Integer CONNECTION_TIMEOUT= 2* 1000;//设置请求超时2秒钟根据业务调整

3、Integer SO_TIMEOUT= 2* 1000;//设置等待数据超时时间2秒钟根据业务调整

4、//定义了当从ClientConnectionManager中检索ManagedClientConnection实例时使用的毫秒级的超时时间

5、//这个参数期望得到一个java.lang.Long类型的值。如果这个参数没有被设置,默认等于CONNECTION_TIMEOUT,因此一定要设置

6、Long CONN_MANAGER_TIMEOUT= 500L;//该值就是连接不够用的时候等待超时时间,一定要设置,而且不能太大()

7、params.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, CONNECTION_TIMEOUT);

8、params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, SO_TIMEOUT);

9、params.setLongParameter(ClientPNames.CONN_MANAGER_TIMEOUT, CONN_MANAGER_TIMEOUT);

10、//在提交请求之前测试连接是否可用

11、params.setBooleanParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, true);

12、PoolingClientConnectionManager conMgr= new PoolingClientConnectionManager();

13、conMgr.setMaxTotal(200);//设置整个连接池更大连接数根据自己的场景决定

14、//是路由的默认更大连接(该值默认为2),限制数量实际使用DefaultMaxPerRoute并非MaxTotal。

15、//设置过小无法支持大并发(ConnectionPoolTimeoutException: Timeout waiting for connection from pool),路由是对maxTotal的细分。

16、conMgr.setDefaultMaxPerRoute(conMgr.getMaxTotal());//(目前只有一个路由,因此让他等于更大值)

17、//另外设置http client的重试次数,默认是3次;当前是禁用掉(如果项目量不到,这个默认即可)

18、httpClient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));

四、OkHttp3 超时设置

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

2、 okhttp Timeout超时设置与用法解释:

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

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

5、 DNS解析「ConnectInterceptor」streamAllocation.newStream

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

7、连接时间「ConnectInterceptor」streamAllocation.newStream

8、写入request「CallServerInterceptor」httpCodec.writeRequestHeaders

9、服务器响应「ConnectInterceptor」streamAllocation.newStream

10、「RealConnection」socket.connect()

11、读取response「CallServerInterceptor」httpCodec.readResponseHeaders

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

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

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

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

16、 rawSocket读取耗时 rawSocket.setSoTimeout(readTimeout)

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

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

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

20、无 callTimeout= dns+ connectTime+ readTimeout+其它

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

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

好了,文章到这里就结束啦,如果本次分享的httpclient设置超时时间和axios默认超时时间问题对您有所帮助,还望关注下本站哦!

标签: 超时 时间 httpclient 默认 设置

上一篇寿光去潍坊客车时间表 寿光至潍坊汽车票价

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!