【发布时间】:2019-12-16 04:07:39
【问题描述】:
这是我的配置:
httpClient = new OkHttpClient.Builder()
.callTimeout(Duration.ofSeconds(60))
.connectTimeout(Duration.ofSeconds(60))
.readTimeout(Duration.ofSeconds(60))
.writeTimeout(Duration.ofSeconds(60))
.build();
我有一个使用此客户端的多线程进程。 几秒钟后 跑步后我得到:
java.net.SocketTimeoutException:超时
在 okio.Okio$4.newTimeoutException(Okio.java:232)
在 okio.AsyncTimeout.exit(AsyncTimeout.java:286)
在 okio.AsyncTimeout$2.read(AsyncTimeout.java:241)
在 okio.RealBufferedSource.indexOf(RealBufferedSource.java:358)
如果我将超时设置为 60 秒,怎么可能?
编辑:
即使添加自定义调度程序也无济于事:
Dispatcher dispatcher = new Dispatcher();
dispatcher.setMaxRequests(Integer.MAX_VALUE);
dispatcher.setMaxRequestsPerHost(Integer.MAX_VALUE);
技术细节:
与我所说的相反,我在 Linux 机器上同时运行客户端和服务器:
客户端机器:net.ipv4.tcp_keepalive_time = 7200
服务器的机器:net.ipv4.tcp_keepalive_time = 7200
【问题讨论】:
-
@MichielLeegwater,它不是重复的,无论如何链接的 SO 帖子都没有提供合理的解决方案
-
你有没有考虑过服务器超时时间非常小而与你的代码无关的可能性?
-
这已在 okhttps 4.3 中修复。见github.com/square/okhttp/issues/3146#issuecomment-569986444