gpt4 book ai didi

ios - AFHTTPRequestOperation 超时

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:56 26 4
gpt4 key购买 nike

我的应用程序中有一些网络服务调用。这是我如何调用它们的示例

+(void) login:(NSDictionary *) loginParams {

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSString * URLString = [MPTLogin getLoginWSAddress];
AFHTTPClient* client = [[AFHTTPClient alloc]initWithBaseURL:[NSURL URLWithString:URLString]];
NSMutableURLRequest *request = [client requestWithMethod:@"POST"
path:URLString
parameters:loginParams];
AFHTTPRequestOperation* operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"didSuccessfullyAttemptLogin" object:nil userInfo:nil];

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if ([operation.response statusCode] == 401)
[[NSNotificationCenter defaultCenter] postNotificationName:@"invalidUserNameOrPassword" object:self userInfo:nil];

else
[[NSNotificationCenter defaultCenter] postNotificationName:@"didFailedAttemptLogin" object:self userInfo:nil];
}];

[operation start];
}

问题是,如果在 5-15 分钟内没有调用 Web 服务,则调用的下一个 Web 服务会超时。然后之后的任何调用只需要一秒钟的时间即可完成,直到几分钟内没有任何调用。然后同样的事情再次发生。

这只发生在设备上。模拟器没问题。另外,这不是wifi问题。我完全不知道如何调试它。

更新:所以我检查了服务器日志,电话没有准时到达。我也尝试使用 Charles Proxy .最离奇的事情发生了。当代理打开时,不会发生超时。事实上,调用几乎是瞬间发生的。但是当我取消代理时,同样的问题发生了。

更新:这不是 wifi 问题,因为我们已经在不同的设备、不同的 wifi 连接、不同的状态下进行了尝试。

更新 所以我最终将超时设置为 150 秒。现在,我的超时次数变少了,但问题是每当我超时时,控制台都会显示它花了 60 多秒。超时码也是-1001

最佳答案

根据我使用网络服务和 AFHTTPRequest 的经验,请求超时主要与服务器/网络相关。如果您确认服务器没有任何问题,我认为您能做的最好的事情就是将请求交给timeoutInterval(例如:15 秒)。接下来,如果您仍然收到请求超时错误,您可以尝试N 次 相同的操作。

例如,您可以执行以下操作:-

重试 3 次调用函数:

[ServerRequest yourMethodName:yourLoginDict with:3];

函数:-

+(void)yourMethodName:(NSDictionary *) loginParams with:(NSUInteger)ntimes {

if (ntimes <= 0) {
NSLog(@"Request failed after trying for N times");
}
else{

NSDictionary * postDictionary = loginParams;
NSError * error = nil;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:postDictionary options:NSJSONWritingPrettyPrinted error:&error];
NSString * urlString = [NSString stringWithFormat:@"%@",@"YOUR URL"];

//Give the Request 15 seconds to load
NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15.0];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:jsonData];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:urlRequest];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Successful request");
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Request Failed at %d: %@",ntimes,error);

//If the request failed, call again with ntimes-1
[self yourMethodName:loginParams with:ntimes-1];
}
];
[operation start];
}
}

希望对您有所帮助。

关于ios - AFHTTPRequestOperation 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23371645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com