wake-up-neo.com

OkHttp / Retrofit Standard-Timeout

Ich habe mich gefragt, wie viele Sekunden ich für meinen Nachrüst-Client einstellen soll.

  1. Wie viele Sekunden sollte ich als Standardzeitlimit verwenden?
  2. Was ist das Standard-Timeout für OkHttp/Retrofit, sollten wir Standardwerte zulassen?
42
  1. Es gibt keinen magischen Wert und hängt von den Erwartungen an Ihr Backend ab. Wenn Ihnen jemand sagt, dass 5s ein guter Wert ist und Sie einen Durchschnitt von 8s auf einem Ihrer Endpunkte bei maximalen Ladezeiten haben, funktioniert 8s nicht für Sie. Als allgemeine Werte habe ich gesehen, dass unter 10s kurz und zwischen 10s und 20s üblich ist.

  1. Ab OkHttp 3.4.1 und Retrofit 2.1., der Standardwert für OkHttp ist 10 Sekunden. Retrofit basiert auf dem OkHttp-Standardwert.

Code-Snippet zum Nachrüsten: (wenn Sie keinen OkHttpClient bereitstellen):

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

OkHttp-Code-Snippet:

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

  1. Die einzige Google App, auf die ich Zugriff habe, ist die Google IO App.

Sie verwenden unterschiedliche Werte. Zum Beispiel für feedback related verwenden sie:

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;

}

Sie benutzen Volley und Sie können es sich ansehen auch dort einige Auszeiten. Und ja, sie sehen kurz aus.

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

In einem anderen http-Client geben sie Ihnen einige Hinweise darauf, was sie für eine kurze und vernünftige Zeitüberschreitung halten.

    /**
     * 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. Es sollte nicht ewig dauern und nicht zu kurz. IMHO sollte es zwischen 10s und 30s sein.
  2. Die Standardeinstellung für das Verbindungs-Timeout, die Retrofit Ihnen gibt (wenn Sie nicht ausdrücklich http client angegeben haben), beträgt 15 Sekunden.

Quelle:

OkHttpClient defaultClient() {   
    OkHttpClient client = new OkHttpClient();
    client.setConnectTimeout(15, TimeUnit.SECONDS);
    client.setReadTimeout(15, TimeUnit.SECONDS);
    client.setWriteTimeout(15, TimeUnit.SECONDS);
    return client;
}
  1. Ich habe das Gefühl, dass Google 30 Sekunden verwendet. Nicht sicher.
22

Sie können verwenden

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

weitere Informationen finden Sie unter: https://futurestud.io/tutorials/retrofit-2-customize-network-timeouts

0
Arunjith R S