Как сравнить сжатые данные с несжатыми данными ASIHTTPRequest? - PullRequest
0 голосов
/ 08 декабря 2011

В настоящее время я получаю сжатые данные с моего сервера. Я хотел бы знать, есть ли способ проверить, какая полоса пропускания сохраняется, но проверить размер сжатых данных по сравнению с несжатыми данными?

Вот так выглядит мой код

//Communication Test
- (IBAction)sendHttpsRequest
{   
    //Start HUD
    [SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeBlack];
    [SVProgressHUD setStatus:@"loading..."];

    //Set request address
    NSMutableString *databaseURL = [[NSMutableString alloc] initWithString:@"https://192.168.17.36:443"];

    //call ASIHTTP delegates (Used to connect to database)
    NSURL *url = [NSURL URLWithString:databaseURL];

    //This sets up all other request
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

    [request setDelegate:self];
    [request setValidatesSecureCertificate:NO];
    [request setPostValue:@"ClientDataSet.xml" forKey:@"filename"];  

    [request startSynchronous];

    BOOL dataWasCompressed = [request isResponseCompressed]; // Was the response gzip compressed?
    NSData *compressedResponse = [request rawResponseData]; // Compressed data
    NSData *uncompressedData = [request responseData]; // Uncompressed data
    NSString *response = [request responseString]; // Uncompressed data as a string

    //Output responses    
    NSLog(@"compressed? %@", dataWasCompressed ? @"YES" : @"NO" );
    NSLog(@"compressed Response = %@", compressedResponse);
    NSLog(@"uncompressed Data = %@", uncompressedData);
    NSLog(@"response = %@", response);
}

- (void)requestFinished:(ASIHTTPRequest *)request
{       
    self.hudCheck = YES;

    responseString = [request responseString]; //Pass requested text from server over to NSString
    NSLog(@"Response String = %@", responseString);

    //removies the SVProgressHUD
    [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(stopAnimating) userInfo:nil repeats:NO];
}

Любая помощь будет принята с благодарностью

1 Ответ

1 голос
/ 08 декабря 2011

МЕТОД 1: Поскольку ASIHttpRequest использует gzip для распаковки данных, один простой способ узнать степень сжатия - просто использовать gzip на вашем сервере и посмотреть, насколько маленьким становится файл.

В обычном сценарии, т.е. при сжатии текстовых файлов, gzip дает степень сжатия, близкую к 80%.

МЕТОД 2: Если вам требуется точное количество сжатых данных, передаваемых по радиоканалу, вам необходимо реализовать request:didReceiveBytes: и request:incrementDownloadSizeBy:. Оба трекера загрузки в ASIHttpRequest в основном используются для отображения индикаторов прогресса загрузки.

...