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].operationQueuestart 它。


现在您已经了解这基本上是如何协同工作的,这里有一个更简单的方法:

子类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 啥都不做

使用 AFNetworking 后台上传大量图片

为啥 AFNetworking POST 多部分请求必须在主队列上同步运行?

CoreData 与来自 GCD 队列的 AFNetworking 请求不兼容?