AFNetworking 可以处理请求队列吗?
Posted
技术标签:
【中文标题】AFNetworking 可以处理请求队列吗?【英文标题】:Can AFNetworking handle a queue of requests? 【发布时间】:2014-02-28 06:47:35 【问题描述】:我在 ios 6 上的示例:
需要(按顺序)将 10 个多部分请求发送到服务器。 (所以请求形成一个队列) 应该显示进度。 如果一个请求失败,所有后续都应该失败 请求队列应该是可取消的AFNetworking 可以帮我解决这个问题吗?还是我应该尝试使用 NSOperations 构建一些东西并自己运行循环?
如果我需要在这些请求之间传递上下文数据,例如第一个请求产生的事务 ID。我需要考虑关于线程可见性的任何注意事项吗?
【问题讨论】:
【参考方案1】:AFNetworking 可以做到这一点。我建议您使用 AFHTTPRequestOperationManager(它本身使用 NSOperation),而不是 AFHTTPSessionManager。 AFHTTPSessionManager 有很多方法可以做到这一点,但没有一种方法比操作更优雅。
在幕后,这是您在没有经理的情况下会做的事情:
您将使用请求序列化程序来生成 NSMutableURLRequest(例如,[AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:]
;也有类似的 JSON 请求序列化程序)。
一旦你有一个 URL 请求,使用[AFHTTPRequestOperation -initWithRequest:]
进行操作。您还应该设置它的完成块。
最后,将您的操作添加到[AFHTTPRequestOperationManager manager].operationQueue
和start
它。
现在您已经了解这基本上是如何协同工作的,这里有一个更简单的方法:
子类AFHTTPRequestOperationManager
,如果您不喜欢默认设置,可以选择设置requestSerializer
覆盖(或使用新实现复制)-POST:parameters:constructingBodyWithBlock:success:failure:]
- 您想要做的不是立即start
您的操作。
设置 NSOperation 依赖链
start
第一个
【讨论】:
所以如果我设置 [AFHTTPRequestOperationManager manager].operationQueue setMaxConcurrentOperationCount:1 我什至不需要 NSOperation 链。 是的,假设您以正确的顺序将它们添加到队列中。 这可能也有帮助samwize.com/2013/03/02/queue-http-operations-with-afnetworking 使用 AFNetworking 3.0 时:您需要继承 AFHTTPSessionManager 并且不需要将 MaxConcurrentOperationCount 设置为 1,因为它已经设置为默认值 1。祝你好运。 @OhadM 在我的应用程序中需要一次缓存文档,将有 10 个文档。 AFNetworking 3.0如何在没有操作队列的情况下缓存所有文档?以上是关于AFNetworking 可以处理请求队列吗?的主要内容,如果未能解决你的问题,请参考以下文章
UIImageView+AFNetworking 图像请求队列阻塞来自 RestKit 的其他网络请求
RestKit / AFNetworking - 一次只发送一个请求(队列)
AFNetworking 2.0 设备离线时的队列请求 setReachabilityStatusChangeBlock 啥都不做