2016-08-09 94 views
3

我有一個OkHttpClient的一些不同的請求攔截器。每個攔截器只需要應用程序的網絡請求的一個子集。到目前爲止,我已經提出了兩種可能的設計。我應該:一個OkHttpClient與所有的攔截器與多個OkHttpClient與特定的攔截器

  • 將每個攔截器附加到單個OkHttpClient客戶端。

OR

  • 克隆客戶端爲每個組攔截器,使得每個OkHttpClient僅具有所必需的那些請求的攔截器。

謝謝!

回答

2

我認爲對於第一種情況,因爲它是

  1. 客戶端使用更簡單,只有一個客戶端進行管理。
  2. 更簡單的清理(關閉調度程序,連接池)
  3. 適用於跨主機的重定向。

只是讓每個攔截器使用條件檢查。

AFAIK連接池可以跨克隆的OkHttpClient實例共享,例如, client.newBuilder()。x(...)。build(),前提是你不需要修改SSLContext。

+0

感謝尤里,我對這種方法的主要擔憂是通過整個攔截器鏈運行每個請求的性能問題。 – davehenry

+0

是否有可能讓多個客戶端共享相同的資源(關閉調度程序和連接池)? – gaara87

+0

如果性能至關重要,那麼您可以對兩種方法進行基準測試。但是,我很確定OkHttp中的I/O和其他活動甚至會超過10-20個攔截器。 –