realCall.cancel 似乎 'could' 关闭了我的连接

realCall.cancel appears that it 'could' close my connection

出于某种原因,在每秒 27 个请求时,我们有时会开始看到 okhttp 出现问题,并且我们注意到每个主机限制为 5 个请求。我们正在与一个 api 交谈,有时 flaky/times 不在等

我注意到我们没有在超时时取消请求,而且它们似乎仍在进行中。 (即我想开始使用 RealCall.cancel)

在调查这个问题时 RealCall.cancel 调用 engine.cancel() 如果引擎不为空则调用 streamAllocation.cancel() 调用以下代码...

public void cancel() {
   HttpStream streamToCancel;
   RealConnection connectionToCancel;
   synchronized (connectionPool) {
     canceled = true;
     streamToCancel = stream;
     connectionToCancel = connection;
   }
   if (streamToCancel != null) {
      streamToCancel.cancel();
   } else if (connectionToCancel != null) {
      connectionToCancel.cancel();
   }
}

这看起来非常可怕,因为我只想取消一个请求而不是整个连接。 IE。也许只是流 http2 流,但我绝对希望连接有效(我认为)。

谢谢, 院长

如果在有流之前取消,例如在 TLS 握手期间,取消将取消整个连接。一旦你有流取消只会取消流。