【问题标题】:One OkHttpClient with all Interceptors vs. multiple OkHttpClients with specific Interceptors一个带有所有拦截器的 OkHttpClient 与带有特定拦截器的多个 OkHttpClient
【发布时间】:2016-08-10 16:12:21
【问题描述】:

我有许多不同的 OkHttpClient 请求拦截器。只有应用程序发出的网络请求的子集才需要每个拦截器。到目前为止,我已经提出了两种可能的设计。我应该:

  • 将每个拦截器附加到单个 OkHttpClient 客户端。

  • 为每组拦截器克隆客户端,以便每个 OkHttpClient 仅具有这些请求所需的拦截器。

谢谢!

【问题讨论】:

    标签: android retrofit2 okhttp3


    【解决方案1】:

    我会支持第一种情况,因为它是

    1. 客户端使用更简单,只需管理一个客户端。
    2. 清理更简单(关闭调度程序、连接池)
    3. 适用于跨主机的重定向。

    只需让每个拦截器都使用条件检查。

    AFAIK 连接池可以在您克隆的 OkHttpClient 实例之间共享,例如client.newBuilder().x(...).build(),前提是您不执行更改 SSLContext 之类的操作。

    【讨论】:

    • 谢谢 Yuri,我对这种方法的主要关注是通过整个拦截器链运行每个请求的性能问题。
    • 是否可以让多个客户端共享相同的资源(关闭调度程序和连接池)?
    • 如果性能至关重要,那么您可以对这两种方法进行基准测试。但是,我很确定 OkHttp 中的 I/O 和其他活动甚至会让 10-20 个拦截器相形见绌。
    • newBuilder 共享资源。请参阅square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html“使用 newBuilder() 自定义您的客户端”
    猜你喜欢
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多