web-dev-qa-db-fra.com

OkHttp / Rétablissement du délai d'attente par défaut

Je me demandais combien de secondes devrais-je régler à mon client en conversion.

  1. Combien de secondes dois-je utiliser comme délai d'attente par défaut?
  2. Quel est le délai par défaut pour OkHttp/Retrofit, devrions-nous laisser les valeurs par défaut?
42
Daniel Gomez Rico
  1. Il n'y a pas de valeur magique et dépend des attentes de votre système. Si quelqu'un vous dit que 5s est une bonne valeur et que vous avez une moyenne de 8s sur l'un de vos points de terminaison à des temps de chargement maximum, cela signifie que 8s ne fonctionne pas pour vous. En tant que valeurs générales, j'ai vu que moins de 10 ans est considéré comme court et qu'entre 10 et 20 ans est commun.

  1. À partir de OkHttp 3.4.1 et Retrofit 2.1., la valeur par défaut pour OkHttp est 10 secondes. La modernisation repose sur la valeur par défaut OkHttp.

Extrait de code de modification: (si vous ne fournissez pas un client OkHttp):

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

Extrait de code OkHttp:

  connectTimeout = 10_000;
  readTimeout = 10_000;
  writeTimeout = 10_000;

  1. La seule application Google à laquelle j'ai accès est l'application Google IO .

Ils utilisent des valeurs différentes. Par exemple pour feedback lié, ils utilisent:

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;

}

Ils utilisent Volley et vous pouvez y jeter un coup d'œil à certains moments. Et oui, ils ont l'air court.

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

Dans un client http différent , ils vous donnent des indices sur ce qu'ils considèrent comme un délai d'expiration court et raisonnable.

    /**
     * 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. Cela ne devrait pas durer éternellement et pas trop court. IMHO, il devrait être entre 10 et 30.
  2. Le paramètre de délai d'attente de connexion par défaut que Retrofit vous donne (si vous n'avez pas spécifié le client http explicitement) est de 15 secondes.

La source:

OkHttpClient defaultClient() {   
    OkHttpClient client = new OkHttpClient();
    client.setConnectTimeout(15, TimeUnit.SECONDS);
    client.setReadTimeout(15, TimeUnit.SECONDS);
    client.setWriteTimeout(15, TimeUnit.SECONDS);
    return client;
}
  1. J'ai l'impression que Google utilise 30 secondes. Pas certain.
22
Nikola Despotoski

Vous pouvez utiliser

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());

pour plus de détails, allez à: https://futurestud.io/tutorials/retrofit-2-customize-network-timeouts

0
Arunjith R S