Używamy funkcji sendAsynchronousRequest interfejsu NSUrlConnection do wysyłania prostych żądań POST do naszego serwera Node JS. Analizując tcpdumps, zauważyliśmy, że czasami nagłówki żądań i treść żądania są podzielone na 2 oddzielne pakiety TCP.Losowa zwłoka między nagłówkami i treścią POST
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:url]];
[request setTimeoutInterval:3];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-type"];
[request setHTTPBody:postData];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler: ^(NSURLResponse *response, NSData *POSTReply, NSError *error) { }];
Problem polega na tym, że czasami nagłówki są wysyłane do serwera, który otwiera połączenie do naszego API, a następnie kilka sekund później ciało pakiet jest przesyłany. Widzimy> 1 sekundę opóźnienia między nagłówkami i treścią, losowo co sto żądań po stronie serwera. Jest to największe źródło opóźnień w naszym interfejsie API.
W przypadku większości żądań nagłówki i treść mają mniej więcej taki sam rozmiar (po 200 bajtów).
Czy ktoś to widział wcześniej?
Nie wysyłaj żądania http w głównej kolejce. – x4snowman