我正在使用 okhttp-sse 在 Java 中使用服务器端事件。
OkHttpClient httpClient = new OkHttpClient();
String sseUrl = getSseUrl();
Request request = new Request.Builder()
.url(sseUrl)
.build();
EventSource.Factory factory = EventSources.createFactory(httpClient);
factory.newEventSource(request, listener);
这可行,我收到了事件,但由于 SocketTimeoutException,它在 10 秒后失败。我发现 okhttp 默认超时为 10 秒,所以这是有道理的。
我将客户端的超时时间增加到 1 分钟,但现在 3 分钟后我收到 SocketTimeoutException。我不明白发生了什么事。我预计 1 分钟后就会超时。
OkHttpClient httpClient = new OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.writeTimeout(1, TimeUnit.MINUTES)
.build();
有人能解释一下吗?
okhttp-sse 的解决方案是将超时设置为
0
以表示不超时。
OkHttpClient sseHttpClient = new OkHttpClient.Builder()
.connectTimeout(0, TimeUnit.MINUTES) // no timeout
.readTimeout(0, TimeUnit.MINUTES) // no timeout
.writeTimeout(0, TimeUnit.MINUTES) // no timeout
.build();