Ios AFN网络-序列化连接

Ios AFN网络-序列化连接,ios,grails,afnetworking,Ios,Grails,Afnetworking,我使用AFNetworking作为我的应用程序连接库。由于后端限制,我无法在应用程序启动时同时发送两个请求,因为服务器将识别CookieTheftException(Grails)。在第一次成功连接后,我可以同时执行任意多个请求,但第一个请求必须是串行的。 我怎样才能做到这一点 我想使用信号量,但我不能阻止主线程 编辑1 我试图覆盖,但没有成功。我认为操作队列不会等待一个请求完成(包括它的回调)来启动另一个请求 - (void)enqueueHTTPRequestOperation:(AFHTT

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

我想使用信号量,但我不能阻止主线程

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

- (void)enqueueHTTPRequestOperation:(AFHTTPRequestOperation *)operation
{
    [self.operationQueue setMaxConcurrentOperationCount:1];
    [super enqueueHTTPRequestOperation:operation];
}
编辑2
我意识到maxConcurrentOperation有效,事实上一次执行一个操作。问题是排队的请求已经创建,但没有服务器所需的cookies。

我建议您阅读相关内容

您可以创建一个队列,并在此队列中放置一些要执行的块

这样:

  • 它不会阻塞主线程
  • 由于所有网络块都将在一个队列中执行,因此不可能同时执行两个块

    • 我建议您阅读

      您可以创建一个队列,并在此队列中放置一些要执行的块

      这样:

      • 它不会阻塞主线程
      • 由于所有网络块都将在一个队列中执行,因此不可能同时执行两个块

      您可以将队列的最大并发操作设置为1。这样,一次只能提出一个请求

      [self.httpClient.operationQueue setMaxConcurrentOperationCount:1];
      

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

      您可以将队列的最大并发操作设置为1。这样,一次只能提出一个请求

      [self.httpClient.operationQueue setMaxConcurrentOperationCount:1];
      

      但是,既然您只需要等待第一个请求,为什么不自己调用该请求,然后在第一个请求完成时初始化其他请求呢?

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


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

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


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

      我不想在第一个请求发生时锁定用户。顺便说一句,他可以离线使用该应用程序,互联网随时可以打开,第一个请求需要序列化。我相信,即使最大并发操作数为1,你仍然可以在后台(异步)调用你的请求。值得一试。我不想在第一个请求出现时锁定用户。顺便说一句,他可以离线使用该应用程序,互联网随时可以打开,第一个请求需要序列化。我相信,即使最大并发操作数为1,你仍然可以在后台(异步)调用你的请求。值得一试。嗨,马特,谢谢你的帮助。使用KVO检查第一个请求何时完成,并且“dispatch\u resume”队列工作得非常出色!嗨,马特,谢谢你的帮助。使用KVO检查第一个请求何时完成,并且“dispatch\u resume”队列工作得非常出色!