首页 > 解决方案 > 在 okhttp3 中对连接进行广泛的健康检查是必不可少的吗?

问题描述

在 okhttp 中,它对每个请求进行 1 毫秒的连接健康检查。它对我的应用有明显的影响。

这张支票有什么用?是否可以添加配置以禁用检查?

    if (doExtensiveChecks) {
      try {
        int readTimeout = socket.getSoTimeout();
        try {
          socket.setSoTimeout(1);
          if (source.exhausted()) {
            return false; // Stream is exhausted; socket is closed.
          }
          return true;
        } finally {
          socket.setSoTimeout(readTimeout);
        }
      } catch (SocketTimeoutException ignored) {
        // Read timed out; socket is good.
      } catch (IOException e) {
        return false; // Couldn't read; socket is closed.
      }
    }

标签: okhttpokhttp3

解决方案


最明显的解决方法是确保您使用的是 HTTP/2,这将跳过套接字上的这项工作并依赖 ping 等。

FWIW 广泛检查基于 HTTP 方法,因此 GET 操作不应该成为问题。

    // We need the network to satisfy this request. Possibly for validating a conditional GET.
    val doExtensiveHealthChecks = request.method != "GET"
    val exchange = transmitter.newExchange(chain, doExtensiveHealthChecks)

这是一个选项吗?


推荐阅读