RestKit / AFNetworking - 一次只发送一个请求(队列)
Posted
技术标签:
【中文标题】RestKit / AFNetworking - 一次只发送一个请求(队列)【英文标题】:RestKit / AFNetworking - Send only one request at a time (queue) 【发布时间】:2015-05-06 09:33:34 【问题描述】:我正在使用 RestKit / AFNetworking 与私有 api 进行通信。此 API 在每次调用时都会返回一个带有 sessionID 的 cookie。如果您使用已使用的 sessionID 进行呼叫,它将返回错误。所以每个 sessionID 只能使用一次。
问题是当同时发送两个请求时,一个会失败,因为它们都在 cookie 中使用相同的 sessionID 发送。
有没有办法让 RestKit / AFNetworking 只在最后一个调用返回下一个 sessionID 后才执行我的调用? 我希望能够只发送呼叫,但在最后一次呼叫成功或失败后延迟它们。
【问题讨论】:
在afnetworking中调用成功或失败块进行第二次调用。 是的,没错。这样可行。但我真的不想这样做,因为 api 调用可能发生在用户输入上。而且我无法预见用户按什么顺序做什么。我也不太想建立自己的排队系统。 cookie是自动设置的还是你需要做点什么? 【参考方案1】:这正是 NSOperationQueue 的用途:
初始化一个 NSOperationQueue 并将并发任务数设置为 1:
NSOperationQueue *queue = [NSOperationQueue new];
queue.maxConcurrentOperationCount = 1;
一定要保留对队列的引用,否则它将被释放。
要将您的 HTTP 调用添加到队列中,您必须继承 NSOperation。编写您的子类,以便每个 NSOperation 实例在操作的 -main 方法中发出 同步 HTTP 请求,然后为下一个操作设置会话 ID:
-(void)main
// read the previous session ID
NSString *sessionID = [MyDataSingleton sharedInstance].sessionID;
//make synchronous call
...
//Set the session ID for the next operation
[MyDataSingleton sharedInstance].sessionID = sessionID;
【讨论】:
以上是关于RestKit / AFNetworking - 一次只发送一个请求(队列)的主要内容,如果未能解决你的问题,请参考以下文章
UIImageView+AFNetworking 图像请求队列阻塞来自 RestKit 的其他网络请求
UIImageView+AFNetworking setImageWithURLRequest 使用 RestKit?
RestKit 附带的 AFNetworking 1.3 不支持 IPv6
restkit vs afnetworking vs mknetworkkit vs nsurlconnection有啥区别[关闭]