今天在使用OKhttp3时,发现请求一直超时,但我通过代理发现有请求返回时。初始化代码如下:
private OkHttpClient httpClient;
protected void initHttpClient(HttpToolConfig httpToolConfig) {
httpClient = new OkHttpClient.Builder()
//.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8888)))
.connectTimeout(httpToolConfig.connectTimeoutSeconds, TimeUnit.SECONDS) // 设置链接超时时间,默认10秒
.readTimeout(httpToolConfig.readTimeoutSeconds, TimeUnit.SECONDS)
.writeTimeout(httpToolConfig.writeTimeoutSeconds, TimeUnit.SECONDS)
.connectionPool(new ConnectionPool(32,5,TimeUnit.MINUTES))
.cookieJar(new CookieJar() {
public void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {
cookieStore.put(httpUrl.host(), list);
}
public List<Cookie> loadForRequest(HttpUrl httpUrl) {
List<Cookie> cookies = cookieStore.get(httpUrl.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
}).build();
}
经过属性排查,发现connectionPool这个连接池会导致请求一直卡到超时为止。
针对OkHttp3的连接池及连接建立过程分析,查看源码资料:
https://sq.163yun.com/blog/article/188729834576564224