2016-10-24 1 views
1

По какой-то причине, при 27 запросах в секунду, мы иногда начинаем видеть проблемы с okhttp, и мы заметили 5 запросов на ограничение хоста. Мы говорим с api, который иногда бывает неаккуратным/тайм-аутом и т. Д.realCall.cancel показывает, что он «может» закрыть мое соединение

Я заметил, что мы не отменяем запросы на тайм-аут, и они, похоже, все еще в полете. (т. е. я хочу начать использовать RealCall.cancel)

при просмотре этого, хотя RealCall.cancel вызывает engine.cancel(), если движок не равен null, который вызывает 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(); 
    } 
} 

Это выглядит очень страшно, так как я просто хотел отменить один запрос, а не все соединение. то есть. просто поток http2 stream может быть, но я определенно хочу, чтобы соединение было живым (я думаю).

спасибо, Дин

ответ

2

Если вы отмените до того, как поток, например, во время рукопожатия TLS, отмена будет полностью отменить соединение. Как только вы прекратите отмену потока, он отменяет поток.

Смежные вопросы