测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布最新发布 | 2015年4月 |
由Dal Rupnik维护。
依赖项 | |
AFNetworking | ~> 2.x |
ReactiveCocoa | ~> 2.x |
AFNetworking 2.0 扩展,用于通过基于特殊条件(超时等)的自动重试来添加ReactiveCocoa支持。重试条件可以设置为块,也可以基于HTTP状态码。
目前仅扩展了AFHTTPSessionManager
,提供Reactive方法。对于每个HTTP操作,返回一个RACSignal
。底层,对所需API进行多次调用,只有最终重试操作才会报错。
对于特定的重试逻辑,可以在方法中提供一个测试块,该块将在每次重试时被评估。如果操作返回YES
,则请求将被重试。
最简单的方法是使用CocoaPods,在Podfile中指定pod。
pod 'AFNetworking-RACRetryExtensions'
或者,您可以下载项目的.zip文件,将其拖放到项目中(手动方式)。
RACRetryExtensions为AFHTTPSessionManager
提供了一个分类,提供了多个方便的方法,这些方法返回一个包装了RACURLSessionRetryDataTask
的RACSignal
。方法提供了不同的配置选项,例如:在失败之前进行重试的次数、下次重试之前的休眠延迟以及重试测试块。前两个参数对应于AFNetworking中的AFHTTPSessionManager
HTTP方法和参数。
以下是一个连接到简单网站的HTTP GET方法的示例。
AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];
RACSignal* getSignal = [manager rac_GET:@"http://example.org" parameters:nil retries:3 interval:10.0];
// Subscribe to signal to start request
[getSignal subscribeNext:^(id responseObject) {
// Handle object
} error:^(NSError *error) {
// Handle error
}];
如果请求由于任何原因失败,将重试3次。在每次重试尝试之前,任务将等待*10秒**才进行重试。以下块在成功接收响应对象时被调用,当所有重试耗尽时调用错误处理器。块提供的错误是最后一次重试收到的错误。
在某些情况下,我们不希望每次都重试,而是在网络连接不良或某些服务器状态下重试。下面的代码使用一个自定义的重试块,如果HTTP响应状态码是5xx将重试。
AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];
RACSignal* getSignal = [manager rac_GET:@"http://example.org" parameters:nil retries:3 interval:10.0 test:^BOOL(NSHTTPURLResponse *response, id responseObject, NSError *error)
{
if (response.statusCode >= 500)
{
return YES;
}
else
{
return NO;
}
}];
// Subscribe to signal to start request
[getSignal subscribeNext:^(id responseObject) {
// Handle object
} error:^(NSError *error) {
// Handle error
}];
Dal Rupnik