Faild to respond 问题处理spa
问题本质:HttpClient内部有链接池机制(PoolingHttpClientConnectionManager)
所以同一个httpclient的链接会被复用,当服务端关闭链接后,客户端仍然使用该链接,则会抛出Faild to respond。线程
大体流程:blog
长链接出现:设置keepalive策略后,当服务端关闭时,客户端的链接被回收,致使服务端的关闭请求被搁置,客户端链接仍未关闭且继续使用。it
拓展 :服务端keepalive 超时后会主动发送FIN、ACK ,而后客户端发送ACK 正常状况服务端应该返回FIN、ACK ,而这时客户端紧接着发送RSTio
短链接出现:因为代码问题致使。cli
TCP短链接出现问题: TCP 链接会等待一会才会关闭 因而 httpclient可能使用该链接一直发送数据date
以后服务端发送FIN,ACK 请求关闭,httpclient仍然使用该链接发送数据PSH,ACKhttpclient
因而致使问题请求
解决策略:im
1)
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setValidateAfterInactivity(timeinmilliseconds);
2)
开启线程定时检测
HttpClientConnectionManager.closeExpiredConnections()、HttpClientConnectionManager.closeIdleConnections()
三、设置http重试策略 .setRetryHandler(new DefaultHttpRequestRetryHandler(5,true))