Подтвердить что ты не робот

OkHttp/Retrofit по умолчанию

Мне было интересно, сколько секунд я должен установить для моего модифицированного клиента.

  • Сколько секунд я должен использовать как тайм-аут по умолчанию?
  • Каков тайм-аут по умолчанию для OkHttp/Retrofit, допустим ли значения по умолчанию?
4b9b3361

Ответ 1

  • Там нет волшебной ценности и зависит от ожиданий на вашем сервере. Если кто-то говорит вам, что 5s - хорошее значение, и у вас на среднем уровне 8s на одной из ваших конечных точек при максимальном времени загрузки, тогда 8s не работает для вас. Как общие значения, я видел, что ниже 10s считается коротким и между 10 и 20 годами являются общими.

  1. По OkHttp 3.4.1 и Retrofit 2.1.0, значение по умолчанию для OkHttp составляет 10 секунд. "Дооснащение" зависит от значения по умолчанию OkHttp.

Отредактируйте фрагмент кода: (если вы не предоставляете 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, к которому я имею доступ, - это 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, и вы можете посмотреть в некоторых таймаутах там. И да, они выглядят короткими.

/** The default socket timeout in milliseconds */
    public static final int DEFAULT_TIMEOUT_MS = 2500;

В другом http-клиенте они дают вам несколько подсказок о том, что они считают коротким и разумным коротким таймаутом.

    /**
     * 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;

Ответ 2

  • Это не должно длиться вечно и не слишком коротко. ИМХО, он должен быть от 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;
}
  1. Я получаю это ощущение, что Google использует 30 секунд. Не уверен.

Ответ 3

Ты можешь использовать

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

Ответ 4

Я использую его как в моем RetrofitApiClient. okhttp version 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();
        }
}