了解使用 okhttp-sse 时的套接字超时

问题描述 投票:0回答:1

我正在使用 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();

有人能解释一下吗?

java okhttp server-sent-events
1个回答
0
投票

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();
© www.soinside.com 2019 - 2024. All rights reserved.