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 握手期间,取消将取消整个连接。一旦你有流取消只会取消流。
出于某种原因,在每秒 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 握手期间,取消将取消整个连接。一旦你有流取消只会取消流。