OkHttp / Retrofit默认超时

时间:2015-06-10 21:15:52

标签: android timeout httprequest retrofit okhttp

我想知道我应该为我的改装客户设置多少秒。

  1. 我应该使用多少秒作为默认超时?
  2. OkHttp / Retrofit的默认超时是什么,我们应该使用默认值吗?

5 个答案:

答案 0 :(得分:64)

  1. 没有神奇的价值,取决于你后端的期望。如果有人告诉你5s是一个很好的值,并且你在一个端点上的最大加载时间平均为8s,那么8s对你不起作用。作为一般值我已经看到低于10s被认为是短的,并且在10到20之间是常见的。
    1. OkHttp 3.4.1 Retrofit 2.1.0 开始,OkHttp的默认值为10秒。 Retrofit依赖于OkHttp默认值。
    2. 改进代码段:(如果您不提供OkHttpClient):

        okhttp3.Call.Factory callFactory = this.callFactory;
        if (callFactory == null) {
          callFactory = new OkHttpClient();
        }
      

      OkHttp代码段:

        connectTimeout = 10_000;
        readTimeout = 10_000;
        writeTimeout = 10_000;
      
      1. 我有权访问的唯一Google App是Google IO应用。
      2. 他们使用不同的值。例如,对于他们使用的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;
        

答案 1 :(得分:22)

  1. 它不应该永远而不是太短。恕我直言,它应该在10到30秒之间。
  2. Retrofit为您提供的默认连接超时设置(如果您未明确指定http客户端)为15秒。
  3. 来源:

    OkHttpClient defaultClient() {   
        OkHttpClient client = new OkHttpClient();
        client.setConnectTimeout(15, TimeUnit.SECONDS);
        client.setReadTimeout(15, TimeUnit.SECONDS);
        client.setWriteTimeout(15, TimeUnit.SECONDS);
        return client;
    }
    
    1. 我觉得Google正在使用30秒。不确定。

答案 2 :(得分:0)

您可以使用

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

答案 3 :(得分:0)

答案 4 :(得分:-1)

我在我的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();
        }
}