iOS очищает очередь запросов
Когда вы создаете / обновляете / удаляете запись в моем приложении, она создает OutgoingRequest
в основных данных. Периодически приложение будет получать эти запросы в очередь и отправлять их все на сервер. Я делаю это, используя сообщение AFHTTPClient (см. Ниже). Проблема, с которой я сталкиваюсь, заключается в том, что она выдвигает все эти запросы за один раз, а затем ответы возвращаются не в реальном порядке.
Мне нужно сделать так, чтобы эти запросы работали "синхронно" в этом запросе B, и его не следует публиковать до тех пор, пока запрос A не будет завершен (успешный или неудачный ответ). Это также делается в фоновом режиме и не должно зависать.
for(OutgoingRequest *req in queue)
{
NSURL *reqUrl = [NSURL URLWithString: globals.baseURL];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:reqUrl];
[httpClient setParameterEncoding:AFJSONParameterEncoding];
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
req.url, @"viewName",
req.json, @"JSON",
req.dateAdded.description, @"dateTime",
nil];
NSString *path = [NSString stringWithFormat:@"cache/update/?deviceUID=%@&token=%@", [MySingleton getMacAddress], globals.token];
[httpClient postPath:path parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
//handle the repsonse
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];
}
Есть ли способ добиться этого с моей текущей настройкой? Или я должен использовать другие средства для размещения на моем сервере?
Спасибо
2 ответа
Вероятно, лучшая идея здесь заключается в использовании AFHTTPRequestOperation
(или один из его подклассов) и создайте зависимости между ними: 2 op. зависит от 1 оп., 3 оп. зависит от 2 оп. и так далее...
Пожалуйста, посмотрите на AFNetworking
а также NSOperation
документация (AFHTTPRequestOperation
это подкласс NSOperation
).
Я бы порекомендовал вам посмотреть на внутренний NSOperationQueue
что AFHTTPClient
управляет. Вы можете установить maxConcurrentOperationCount
до 1, чтобы сделать его последовательной очередью, поэтому ваши запросы будут выполняться по одному в том порядке, в котором вы добавляете их в очередь.
Это только для чтения operationQueue
собственность на AFHTTPClient.
/**
The operation queue which manages operations enqueued by the HTTP client.
*/
@property (readonly, nonatomic, strong) NSOperationQueue *operationQueue;
Где бы вы ни выполняли настройку клиента, установите счетчик одновременных операций на 1.
myHTTPClient.operationQueue.maxConcurrentOperationCount = 1;
Что касается сетевых запросов, последовательная очередь, вероятно, является хорошей идеей. В конце дня число одновременных запросов по-прежнему ограничено скоростью, которую может иметь количество HTTP-соединений, которые вы можете открыть с вашим сервером, и пропускной способностью антенны устройств, которые имеют верхний предел.