Skip to content

Commit 2d87497

Browse files
fix: increase the readTimeout value of the default OkHttpClient
With the previous value (10 seconds by default), a connection established with HTTP long-polling was closed if the server did not send any packet for 10 seconds (the HTTP request would timeout from the client side). It will now default to 1 minute, which is above the `pingInterval + pingTimeout` value from the server. Note: the connectTimeout and writeTimeout options are left as is (10 seconds), but you may need to increase them depending on your use case: ``` OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(20, TimeUnit.SECONDS) .readTimeout(1, TimeUnit.MINUTES) .writeTimeout(1, TimeUnit.MINUTES) .build(); ``` Related: - socketio/socket.io-client-java#491 - socketio/socket.io-client-java#660 Backported from fb531fa
1 parent 319f2e2 commit 2d87497

File tree

3 files changed

+13
-13
lines changed

3 files changed

+13
-13
lines changed

Diff for: src/main/java/io/socket/engineio/client/Socket.java

+11-8
Original file line numberDiff line numberDiff line change
@@ -211,16 +211,10 @@ public Socket(Options opts) {
211211
this.callFactory = opts.callFactory != null ? opts.callFactory : defaultCallFactory;
212212
this.webSocketFactory = opts.webSocketFactory != null ? opts.webSocketFactory : defaultWebSocketFactory;
213213
if (callFactory == null) {
214-
if (defaultOkHttpClient == null) {
215-
defaultOkHttpClient = new OkHttpClient();
216-
}
217-
callFactory = defaultOkHttpClient;
214+
callFactory = getDefaultOkHttpClient();
218215
}
219216
if (webSocketFactory == null) {
220-
if (defaultOkHttpClient == null) {
221-
defaultOkHttpClient = new OkHttpClient();
222-
}
223-
webSocketFactory = defaultOkHttpClient;
217+
webSocketFactory = getDefaultOkHttpClient();
224218
}
225219
}
226220

@@ -232,6 +226,15 @@ public static void setDefaultOkHttpCallFactory(okhttp3.Call.Factory factory) {
232226
defaultCallFactory = factory;
233227
}
234228

229+
private static OkHttpClient getDefaultOkHttpClient() {
230+
if (defaultOkHttpClient == null) {
231+
defaultOkHttpClient = new OkHttpClient.Builder()
232+
.readTimeout(1, TimeUnit.MINUTES) // defaults to 10 seconds
233+
.build();
234+
}
235+
return defaultOkHttpClient;
236+
}
237+
235238
/**
236239
* Connects the client.
237240
*

Diff for: src/main/java/io/socket/engineio/client/transports/PollingXHR.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import okhttp3.Callback;
1919
import okhttp3.HttpUrl;
2020
import okhttp3.MediaType;
21-
import okhttp3.OkHttpClient;
2221
import okhttp3.RequestBody;
2322
import okhttp3.Response;
2423
import okhttp3.ResponseBody;
@@ -172,7 +171,7 @@ public Request(Options opts) {
172171
this.method = opts.method != null ? opts.method : "GET";
173172
this.uri = opts.uri;
174173
this.data = opts.data;
175-
this.callFactory = opts.callFactory != null ? opts.callFactory : new OkHttpClient();
174+
this.callFactory = opts.callFactory;
176175
}
177176

178177
public void create() {

Diff for: src/main/java/io/socket/engineio/client/transports/WebSocket.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import io.socket.thread.EventThread;
1515
import io.socket.utf8.UTF8Exception;
1616
import io.socket.yeast.Yeast;
17-
import okhttp3.OkHttpClient;
1817
import okhttp3.Request;
1918
import okhttp3.Response;
2019
import okhttp3.WebSocketListener;
@@ -39,15 +38,14 @@ protected void doOpen() {
3938
this.emit(EVENT_REQUEST_HEADERS, headers);
4039

4140
final WebSocket self = this;
42-
okhttp3.WebSocket.Factory factory = webSocketFactory != null ? webSocketFactory : new OkHttpClient();
4341
Request.Builder builder = new Request.Builder().url(uri());
4442
for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
4543
for (String v : entry.getValue()) {
4644
builder.addHeader(entry.getKey(), v);
4745
}
4846
}
4947
final Request request = builder.build();
50-
ws = factory.newWebSocket(request, new WebSocketListener() {
48+
ws = webSocketFactory.newWebSocket(request, new WebSocketListener() {
5149
@Override
5250
public void onOpen(okhttp3.WebSocket webSocket, Response response) {
5351
final Map<String, List<String>> headers = response.headers().toMultimap();

0 commit comments

Comments
 (0)