2015-06-10 22 views
27

Tôi đã tự hỏi tôi nên đặt bao nhiêu giây cho ứng dụng khách trang bị thêm của mình.OkHttp/Retrofit timeout mặc định

  1. Tôi nên sử dụng bao nhiêu giây làm thời gian chờ mặc định?
  2. Thời gian chờ mặc định cho OkHttp/Retrofit là gì, chúng tôi có nên để giá trị mặc định không?

Trả lời

45
  1. Không có giá trị kỳ diệu và phụ thuộc vào kỳ vọng trên chương trình phụ trợ của bạn. Nếu ai đó nói với bạn 5s là một giá trị tốt và bạn đang có 8s trung bình trên một trong các thiết bị đầu cuối của bạn tại thời gian tải tối đa, sau đó 8s không hoạt động cho bạn. Như các giá trị chung tôi đã thấy rằng dưới 10s là xem xét ngắn và giữa 10 và 20 là phổ biến.

  1. Tính đến OkHttp 3.4.1Retrofit 2.1.0, giá trị mặc định cho OkHttp là 10 giây. Retrofit dựa trên giá trị mặc định OkHttp.

đoạn mã Retrofit: (nếu bạn không cung cấp một OkHttpClient):

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

OkHttp đoạn mã:

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

  1. Ứng dụng Google duy nhất tôi có quyền truy cập là ứng dụng Google IO.

Họ đang sử dụng các giá trị khác nhau. Ví dụ cho feedback liên quan họ sử dụng:

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; 

}

Họ đang sử dụng Volley và bạn can take a look tại một số timeout đó là tốt. Và có họ nhìn ngắn.

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

Trong một số different http client, chúng cung cấp cho bạn một số manh mối về những gì họ xem xét là thời gian chờ ngắn và hợp lý.

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

câu trả lời tuyệt vời, cảm ơn – Caipivara

+0

Câu trả lời hay. Thx – KingWu

19
  1. Không nên dùng mãi mãi và không quá ngắn. IMHO, phải trong khoảng từ 10 đến 30 giây.
  2. Cài đặt thời gian kết nối mặc định mà Retrofit cung cấp cho bạn (nếu bạn chưa chỉ định http máy khách rõ ràng) là 15 giây.

Nguồn:

OkHttpClient defaultClient() { 
    OkHttpClient client = new OkHttpClient(); 
    client.setConnectTimeout(15, TimeUnit.SECONDS); 
    client.setReadTimeout(15, TimeUnit.SECONDS); 
    client.setWriteTimeout(15, TimeUnit.SECONDS); 
    return client; 
} 
  1. tôi có được điều này cảm thấy Google đang sử dụng 30 giây. Không chắc.
1

Tôi đang sử dụng nó như thế này trong RetrofitApiClient của tôi.okhttp phiên bản 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(); 
     } 
} 
+0

và tại sao 15 giây? – Caipivara