Ios AFN网络-序列化连接
我使用AFNetworking作为我的应用程序连接库。由于后端限制,我无法在应用程序启动时同时发送两个请求,因为服务器将识别CookieTheftException(Grails)。在第一次成功连接后,我可以同时执行任意多个请求,但第一个请求必须是串行的。 我怎样才能做到这一点 我想使用信号量,但我不能阻止主线程 编辑1 我试图覆盖,但没有成功。我认为操作队列不会等待一个请求完成(包括它的回调)来启动另一个请求Ios AFN网络-序列化连接,ios,grails,afnetworking,Ios,Grails,Afnetworking,我使用AFNetworking作为我的应用程序连接库。由于后端限制,我无法在应用程序启动时同时发送两个请求,因为服务器将识别CookieTheftException(Grails)。在第一次成功连接后,我可以同时执行任意多个请求,但第一个请求必须是串行的。 我怎样才能做到这一点 我想使用信号量,但我不能阻止主线程 编辑1 我试图覆盖,但没有成功。我认为操作队列不会等待一个请求完成(包括它的回调)来启动另一个请求 - (void)enqueueHTTPRequestOperation:(AFHTT
- (void)enqueueHTTPRequestOperation:(AFHTTPRequestOperation *)operation
{
[self.operationQueue setMaxConcurrentOperationCount:1];
[super enqueueHTTPRequestOperation:operation];
}
编辑2
我意识到maxConcurrentOperation有效,事实上一次执行一个操作。问题是排队的请求已经创建,但没有服务器所需的cookies。我建议您阅读相关内容 您可以创建一个队列,并在此队列中放置一些要执行的块 这样:
- 它不会阻塞主线程
- 由于所有网络块都将在一个队列中执行,因此不可能同时执行两个块
- 它不会阻塞主线程
- 由于所有网络块都将在一个队列中执行,因此不可能同时执行两个块
- 我建议您阅读
您可以创建一个队列,并在此队列中放置一些要执行的块
这样:
[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”队列工作得非常出色!