web-dev-qa-db-ja.com

OkHttp / Retrofitのデフォルトのタイムアウト

レトロフィットクライアントに何秒を設定する必要があるのか​​と思いまして。

  1. デフォルトのタイムアウトとして何秒使用する必要がありますか?
  2. OkHttp/Retrofitのデフォルトのタイムアウトは何ですか?デフォルト値を許可する必要がありますか?
42
  1. 魔法のような価値はなく、バックエンドへの期待に依存します。誰かが5秒が適切な値であり、最大ロード時間でエンドポイントの1つで平均8秒であると言った場合、8秒は機能しません。一般的な値として、10秒未満は短く、10秒から20秒の間が一般的であると考えています。

  1. OkHttp 3.4.1およびRetrofit 2.1.、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;
68
Sotti
  1. 永遠にかかることはなく、短すぎないはずです。私見、それは10秒から30秒の間でなければなりません。
  2. 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秒を使用していると感じています。わからない。
22

使用できます

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

0
Arunjith R S