AFNetworking - 序列化连接

时间:2013-01-17 20:27:39

标签: ios grails afnetworking

我使用AFNetworking作为我的应用程序的连接库。由于后端限制,我无法在应用启动时同时发送两个请求,因为服务器将识别CookieTheftException(Grails)。在第一次成功连接后,我可以根据需要执行尽可能多的同时请求,但第一次需要是串行连接。 我怎样才能做到这一点?

我想使用信号量,但我无法阻止主线程。

编辑1

我试图覆盖,但它没有用。我认为操作队列不会等待一个请求完成(包括它的回调)以启动另一个请求。

- (void)enqueueHTTPRequestOperation:(AFHTTPRequestOperation *)operation
{
    [self.operationQueue setMaxConcurrentOperationCount:1];
    [super enqueueHTTPRequestOperation:operation];
}

编辑2

我意识到maxConcurrentOperation工作,实际上一次执行1次操作。问题是,已经创建了排队的请求,但没有服务器需要的cookie。

3 个答案:

答案 0 :(得分:4)

我对Grails或您系统的特定架构一无所知,但也许这可以通过简单地使用NSMutableURLRequest -setHTTPShouldHandleCookies:关闭该请求的cookie来解决。

除此之外,确保只有一个请求操作为该初始调用运行的最佳方法是完全忽略队列,并在AFHTTPRequestOperation子类上只有AFHTTPClient属性。您甚至可以使用KVO来确保操作队列在初始请求完成之前暂停。

答案 1 :(得分:2)

我建议您阅读GCD

您可以创建一个队列并在此队列中放置一些块来执行。

这样:

  • 它不会阻止主线程
  • 由于您的所有网络块都将在一个队列中执行,因此无法同时执行两个块。

答案 2 :(得分:0)

您可以将队列的最大并发操作数设置为1.这样一次只能生成一个请求。

[self.httpClient.operationQueue setMaxConcurrentOperationCount:1];

但是,由于您只需要等待第一个请求,为什么不单独调用该请求,然后仅在第一个请求完成时初始化其他请求?