OkHttp/Retrofit 默认超时
OkHttp/Retrofit default timeout
我想知道我应该为改造客户端设置多少秒。
- 我应该使用多少秒作为默认超时?
- OkHttp/Retrofit 的默认超时是多少,我们应该使用默认值吗?
- 它不应该花很长时间,也不会太短。恕我直言,它应该在 10 到 30 之间。
- Retrofit 为您提供的默认连接超时设置(如果您未明确指定 http 客户端)为 15 秒。
来源:
OkHttpClient defaultClient() {
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(15, TimeUnit.SECONDS);
client.setReadTimeout(15, TimeUnit.SECONDS);
client.setWriteTimeout(15, TimeUnit.SECONDS);
return client;
}
- 我感觉 Google 用了 30 秒。不确定。
- 没有神奇的价值,取决于您对后端的期望。如果有人告诉您 5s 是一个很好的价值,而您在最大加载时间的其中一个端点上的平均时间为 8s,那么 8s 不适合您。作为一般值,我看到低于 10s 被认为是短的,10s 到 20s 之间是常见的。
- 自 OkHttp 3.4.1 and Retrofit 2.1.0 起,OkHttp 的默认值为 10 秒。 Retrofit依赖OkHttp默认值。
改进代码片段:(如果您不提供 OkHttpClient):
okhttp3.Call.Factory callFactory = this.callFactory;
if (callFactory == null) {
callFactory = new OkHttpClient();
}
OkHttp 代码片段:
connectTimeout = 10_000;
readTimeout = 10_000;
writeTimeout = 10_000;
- 我唯一可以访问的 Google 应用程序是 Google IO 应用程序。
他们使用不同的值。例如,对于 feedback 相关,他们使用:
public class FeedbackConstants{
public static final int FEEDBACK_CONNECT_TIMEOUT_MS = 15000;
public static final int FEEDBACK_READ_TIMEOUT_MS = 15000;
public static final int GOOGLE_API_CLIENT_CONNECTION_TIMEOUT_S = 10;
}
他们正在使用 Volley,而您 can take a look 也在某些超时时间使用。是的,它们看起来很矮。
/** The default socket timeout in milliseconds */
public static final int DEFAULT_TIMEOUT_MS = 2500;
在 different http client 中,他们会为您提供一些线索,说明他们认为什么是短而合理的短超时。
/**
* Default 2s, deliberately short. If you need longer, you should be using
* {@link AsyncHttpClient} instead.
*/
protected int connectionTimeout = 2000;
/**
* Default 8s, reasonably short if accidentally called from the UI thread.
*/
protected int readTimeout = 8000;
我在我的 RetrofitApiClient 中像这样使用它。 okhttp 版本 3.4.1
public class RetrofitApiClient {
private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(15L, TimeUnit.SECONDS)
.writeTimeout(15L, TimeUnit.SECONDS);
public void someMethod() {
OkHttpClient client = httpClient.build();
}
}
您可以使用
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.build();
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("http://10.0.2.2:3000/")
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create());
有关详细信息,请访问:https://futurestud.io/tutorials/retrofit-2-customize-network-timeouts
https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/OkHttpClient.kt#L471
https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/OkHttpClient.kt#L203
internal var connectTimeout = 10_000
internal var readTimeout = 10_000
internal var writeTimeout = 10_000
我想知道我应该为改造客户端设置多少秒。
- 我应该使用多少秒作为默认超时?
- OkHttp/Retrofit 的默认超时是多少,我们应该使用默认值吗?
- 它不应该花很长时间,也不会太短。恕我直言,它应该在 10 到 30 之间。
- Retrofit 为您提供的默认连接超时设置(如果您未明确指定 http 客户端)为 15 秒。
来源:
OkHttpClient defaultClient() {
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(15, TimeUnit.SECONDS);
client.setReadTimeout(15, TimeUnit.SECONDS);
client.setWriteTimeout(15, TimeUnit.SECONDS);
return client;
}
- 我感觉 Google 用了 30 秒。不确定。
- 没有神奇的价值,取决于您对后端的期望。如果有人告诉您 5s 是一个很好的价值,而您在最大加载时间的其中一个端点上的平均时间为 8s,那么 8s 不适合您。作为一般值,我看到低于 10s 被认为是短的,10s 到 20s 之间是常见的。
- 自 OkHttp 3.4.1 and Retrofit 2.1.0 起,OkHttp 的默认值为 10 秒。 Retrofit依赖OkHttp默认值。
改进代码片段:(如果您不提供 OkHttpClient):
okhttp3.Call.Factory callFactory = this.callFactory;
if (callFactory == null) {
callFactory = new OkHttpClient();
}
OkHttp 代码片段:
connectTimeout = 10_000;
readTimeout = 10_000;
writeTimeout = 10_000;
- 我唯一可以访问的 Google 应用程序是 Google IO 应用程序。
他们使用不同的值。例如,对于 feedback 相关,他们使用:
public class FeedbackConstants{
public static final int FEEDBACK_CONNECT_TIMEOUT_MS = 15000;
public static final int FEEDBACK_READ_TIMEOUT_MS = 15000;
public static final int GOOGLE_API_CLIENT_CONNECTION_TIMEOUT_S = 10;
}
他们正在使用 Volley,而您 can take a look 也在某些超时时间使用。是的,它们看起来很矮。
/** The default socket timeout in milliseconds */
public static final int DEFAULT_TIMEOUT_MS = 2500;
在 different http client 中,他们会为您提供一些线索,说明他们认为什么是短而合理的短超时。
/**
* Default 2s, deliberately short. If you need longer, you should be using
* {@link AsyncHttpClient} instead.
*/
protected int connectionTimeout = 2000;
/**
* Default 8s, reasonably short if accidentally called from the UI thread.
*/
protected int readTimeout = 8000;
我在我的 RetrofitApiClient 中像这样使用它。 okhttp 版本 3.4.1
public class RetrofitApiClient {
private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(15L, TimeUnit.SECONDS)
.writeTimeout(15L, TimeUnit.SECONDS);
public void someMethod() {
OkHttpClient client = httpClient.build();
}
}
您可以使用
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.build();
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("http://10.0.2.2:3000/")
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create());
有关详细信息,请访问:https://futurestud.io/tutorials/retrofit-2-customize-network-timeouts
https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/OkHttpClient.kt#L471
https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/OkHttpClient.kt#L203
internal var connectTimeout = 10_000
internal var readTimeout = 10_000
internal var writeTimeout = 10_000