Какой метод делегата вызывается, когда истекает время ожидания ASI-HTTP-Request?

У меня есть приложение, которое использует ASI-HTTP-Request для больших файлов, и тестер недавно заметил, что они наблюдают очень длительные задержки загрузки, которые должны проявляться как тайм-ауты. У меня есть методы делегирования, связанные с ошибками запроса, но, похоже, этого не происходит.

Я полистал их документацию, но ничего конкретного не увидел.


person M. Ryan    schedule 29.07.2010    source источник


Ответы (1)


В ASIHTTPRequest.m найдите метод -checkRequestStatus.

Когда происходит тайм-аут, запрос завершается с ошибкой типа ASIRequestTimedOutError:

[self failWithError:ASIRequestTimedOutError];

Таким образом, вы должны иметь возможность проверить ошибку, возвращаемую в методе -requestFailed: делегата:

- (void)requestFailed:(ASIHTTPRequest *)request {
    NSLog(@"Error: %@",[[request error] localizedDescription]);
}

Это хорошая идея, чтобы прочитать исходный код, чтобы получить общее представление о том, как все работает. Документация великолепна, но не всегда синхронизирована с исходным кодом.

person Alex Reynolds    schedule 29.07.2010
comment
Спасибо. Не зная много о самом HTTP ... Я бы спросил об этом ... если у меня есть файл размером 5 МБ, а время ожидания моего запроса установлено на 10 секунд, а через 10 секунд он загружается только скажем ... 3 МБ ... это считается тайм-аутом? - person M. Ryan; 29.07.2010
comment
Нет, тайм-аут начинается после того, как данные не поступают, между чанками. Если для загрузки 3 МБ требуется 10 секунд, а затем запрос ждет, и ждет, и ждет, и больше никаких данных не приходит... вот тогда запускается таймер тайм-аута. Таким образом, в этом примере это будет 20 секунд от начала запроса до ошибки тайм-аута. - person Alex Reynolds; 29.07.2010
comment
Как тогда я могу сказать, хорошо, даже если данные поступают, это занимает глупо много времени ... кроме того, что я просто создаю свой собственный NSTimer ... что я могу сделать, просто интересно, дает ли ASI мне встроенное решение. - person M. Ryan; 29.07.2010
comment
Я не вижу никаких встроенных, но вместо того, чтобы создавать свой собственный экземпляр NSTimer, вы можете легко использовать существующие значения в ASIHTTPRequest, постоянно суммируя свойство secondsSinceLastActivity для создания пользовательского свойства overallActivityTime. В -checkRequestStatus вы можете потерпеть неудачу со своей собственной ошибкой, если overallActivityTime выше заданного порога. - person Alex Reynolds; 29.07.2010