mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-05-10 09:29:39 +08:00
Upgrade to OkHttp3
Summary: Update to [OkHttp](https://github.com/square/okhttp) to [OkHttp3](https://publicobject.com/2015/12/12/com-squareup-okhttp3/) We must also update: - Fresco to 0.10.0 - okio to 1.8.0 **Motivation** Reasons for upgrading: * Issue #4021 * "We discovered that RN Android sometimes fails to connect to the latest stable version of NGINX when HTTP/2 is enabled. We aren't seeing errors with other HTTP clients so we think it's specific to RN and OkHttp. Square has fixed several HTTP/2 bugs over the past eight months." - ide * OkHttp3 will be maintained & improved, but OkHttp2 will only receive [security fixes](https://publicobject.com/2016/02/11/okhttp-certificate-pinning-vulnerability/) * Cleaner APIs - "Get and Set prefixes are avoided" * Deprecated/Removed - HttpURLConnection & Apache HTTP * React Native apps are currently being forced to bundle two versions of OkHttp (v2 & v3), if another library uses v3 * Improved WebSocket performance - [CHANGELOG.md](https://github.com/square/okhttp/blob/master Closes https://github.com/facebook/react-native/pull/6113 Reviewed By: andreicoman11, lexs Differential Revision: D3292375 Pulled By: bestander fbshipit-source-id: 7c7043eaa2ea63f95854108b401c4066098d67f7
This commit is contained in:
committed by
Facebook Github Bot 1
parent
5047f6f54c
commit
6bbaff2944
@@ -21,16 +21,16 @@ android_library(
|
||||
react_native_dep('java/com/facebook/proguard/annotations:annotations'),
|
||||
],
|
||||
deps = [
|
||||
react_native_target('java/com/facebook/react/common:common'),
|
||||
react_native_dep('java/com/facebook/systrace:systrace'),
|
||||
react_native_dep('libraries/fbcore/src/main/java/com/facebook/common/logging:logging'),
|
||||
react_native_dep('libraries/soloader/java/com/facebook/soloader:soloader'),
|
||||
react_native_dep('third-party/java/infer-annotations:infer-annotations'),
|
||||
react_native_dep('third-party/java/jackson:core'),
|
||||
react_native_dep('third-party/java/jsr-305:jsr-305'),
|
||||
react_native_dep('third-party/java/okhttp:okhttp3'),
|
||||
react_native_dep('third-party/java/okhttp:okhttp3-ws'),
|
||||
react_native_dep('third-party/java/okio:okio'),
|
||||
react_native_dep('third-party/java/okhttp:okhttp'),
|
||||
react_native_dep('third-party/java/okhttp:okhttp-ws'),
|
||||
react_native_target('java/com/facebook/react/common:common'),
|
||||
],
|
||||
visibility = [
|
||||
'PUBLIC',
|
||||
|
||||
@@ -25,14 +25,15 @@ import com.fasterxml.jackson.core.JsonFactory;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.JsonToken;
|
||||
import com.squareup.okhttp.OkHttpClient;
|
||||
import com.squareup.okhttp.Request;
|
||||
import com.squareup.okhttp.Response;
|
||||
import com.squareup.okhttp.ws.WebSocket;
|
||||
import com.squareup.okhttp.ws.WebSocketCall;
|
||||
import com.squareup.okhttp.ws.WebSocketListener;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.RequestBody;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import okhttp3.ws.WebSocket;
|
||||
import okhttp3.ws.WebSocketCall;
|
||||
import okhttp3.ws.WebSocketListener;
|
||||
import okio.Buffer;
|
||||
import okio.BufferedSource;
|
||||
|
||||
/**
|
||||
* A wrapper around WebSocketClient that recognizes RN debugging message format.
|
||||
@@ -59,11 +60,11 @@ public class JSDebuggerWebSocketClient implements WebSocketListener {
|
||||
throw new IllegalStateException("JSDebuggerWebSocketClient is already initialized.");
|
||||
}
|
||||
mConnectCallback = callback;
|
||||
mHttpClient = new OkHttpClient();
|
||||
mHttpClient.setConnectTimeout(10, TimeUnit.SECONDS);
|
||||
mHttpClient.setWriteTimeout(10, TimeUnit.SECONDS);
|
||||
// Disable timeouts for read
|
||||
mHttpClient.setReadTimeout(0, TimeUnit.MINUTES);
|
||||
mHttpClient = new OkHttpClient.Builder()
|
||||
.connectTimeout(10, TimeUnit.SECONDS)
|
||||
.writeTimeout(10, TimeUnit.SECONDS)
|
||||
.readTimeout(0, TimeUnit.MINUTES) // Disable timeouts for read
|
||||
.build();
|
||||
|
||||
Request request = new Request.Builder().url(url).build();
|
||||
WebSocketCall call = WebSocketCall.create(mHttpClient, request);
|
||||
@@ -162,10 +163,8 @@ public class JSDebuggerWebSocketClient implements WebSocketListener {
|
||||
new IllegalStateException("WebSocket connection no longer valid"));
|
||||
return;
|
||||
}
|
||||
Buffer messageBuffer = new Buffer();
|
||||
messageBuffer.writeUtf8(message);
|
||||
try {
|
||||
mWebSocket.sendMessage(WebSocket.PayloadType.TEXT, messageBuffer);
|
||||
mWebSocket.sendMessage(RequestBody.create(WebSocket.TEXT, message));
|
||||
} catch (IOException e) {
|
||||
triggerRequestFailure(requestID, e);
|
||||
}
|
||||
@@ -188,17 +187,17 @@ public class JSDebuggerWebSocketClient implements WebSocketListener {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessage(BufferedSource payload, WebSocket.PayloadType type) throws IOException {
|
||||
if (type != WebSocket.PayloadType.TEXT) {
|
||||
FLog.w(TAG, "Websocket received unexpected message with payload of type " + type);
|
||||
public void onMessage(ResponseBody response) throws IOException {
|
||||
if (response.contentType() != WebSocket.TEXT) {
|
||||
FLog.w(TAG, "Websocket received unexpected message with payload of type " + response.contentType());
|
||||
return;
|
||||
}
|
||||
|
||||
String message = null;
|
||||
try {
|
||||
message = payload.readUtf8();
|
||||
message = response.source().readUtf8();
|
||||
} finally {
|
||||
payload.close();
|
||||
response.close();
|
||||
}
|
||||
Integer replyID = null;
|
||||
|
||||
|
||||
@@ -18,9 +18,9 @@ import com.facebook.react.bridge.queue.MessageQueueThreadImpl;
|
||||
import com.facebook.react.bridge.queue.ProxyQueueThreadExceptionHandler;
|
||||
import com.facebook.react.common.build.ReactBuildConfig;
|
||||
|
||||
import com.squareup.okhttp.OkHttpClient;
|
||||
import com.squareup.okhttp.Request;
|
||||
import com.squareup.okhttp.Response;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import okio.Okio;
|
||||
import okio.Sink;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user