как отслеживать скорость одиночной загрузки с помощью asihttprequest

#iphone #ios #performance #request #asihttprequest

#iPhone #iOS #Производительность #запрос #asihttprequest

Вопрос:

Кто-нибудь может мне помочь с asihttprequest?

Я хочу отслеживать скорость загрузки каждого загружаемого файла, а не среднюю скорость всех файлов.

Для среднего значения скорости всех загрузок есть [ASIHTTPRequest averageBandwidthUsedPerSecond] но что я могу использовать для отслеживания каждой загрузки?

Спасибо

Ответ №1:

Учитывая, что ASI мертв, мне недавно пришлось сделать это в более старом проекте. Если кому-то еще нужна помощь:

 -(void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes
{
    if (!lastBytesReceived)
        lastBytesReceived = [NSDate date];

    NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:lastBytesReceived];

    float KB = (bytes / 1024);

    float kbPerSec =  KB * (1.0/interval); //KB * (1 second / interval (less than one second))

    NSLog(@"%llu bytes received in %f seconds @ %0.01fKB/s",bytes,interval, kbPerSec);

    lastBytesReceived = [NSDate date];
}
  

Ответ №2:

Вы можете установить downloadProgressDelegate для каждого запроса, который будет получать запрос:didReceiveBytes: call каждый раз, когда поступают некоторые данные — вы можете использовать это для расчета скорости загрузки.

Смотрите здесь, в документации:

http://allseeing-i.com/ASIHTTPRequest/How-to-use#custom_progress_tracking

Комментарии:

1. Как я могу вычислить общее время, прошедшее с первого полученного байта?

2. Вы можете сохранить результат [NSDate date] в методе делегирования didReceiveResponseHeaders, затем в didReceiveBytes использовать [NSData timeIntervalSinceReferenceDate:]