NSMutableURLRequest 在大约 15 秒后超时。超时设置为 240 秒
Posted
技术标签:
【中文标题】NSMutableURLRequest 在大约 15 秒后超时。超时设置为 240 秒【英文标题】:NSMutableURLRequest timing out after approx 15 seconds. Timeout is set at 240 seconds 【发布时间】:2012-06-22 22:58:22 【问题描述】:我正在开发一个 ios 应用程序,它使用 NSMutableURLRequest
和 NSURLConnection
将数据发送到我的服务器。我需要在失败时显示错误消息。我发送请求的代码如下所示
const int TIMEOUT = 120;
-(void)send:(id<NSURLConnectionDelegate>)delegate
bodyContents = [bodyContents stringByAppendingFormat:@"--%@--",boundry];
NSData *data = [bodyContents dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
[request setValue:[NSString stringWithFormat:@"%i",[data length]+4] forHTTPHeaderField:@"Content-Length"];
NSLog(@"Timeout before setting custom is %f",request.timeoutInterval);
[request setTimeoutInterval:TIMEOUT];
NSLog(@"Timeout after setting custom is %f",request.timeoutInterval);
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:delegate];
if(connection)
NSLog(@"Connection good");
else
NSLog(@"Connection not so good");
//in the delegate class
-(void)connectionDidFinishLoading:(NSURLConnection*)connection
NSLog(@"connectionDidFinishLoading");
-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError *)error
NSLog(@"Failed with error %@",error);
btnCancel.title = @"Retry";
self.navigationItem.hidesBackButton = NO;
[self showAlertDialog:[NSString stringWithFormat:@"%@",[error localizedDescription]] :@"Error"];
我希望在 2 分钟无响应后调用 didFailWithError 消息。相反,它在大约 15 秒无响应后被调用,这没有任何意义。我查看了文档以检查我是否错误地设置了超时,我唯一能发现的是,带有正文的帖子的最小超时时间是 240 秒,我已经不情愿地接受了。
运行应用程序的输出如下所示:
2012-06-22 16:49:12.393 媒体上传[672:707] 设置自定义前的超时时间为 240.000000
2012-06-22 16:49:12.394 媒体上传[672:707] 设置自定义后超时为 240.000000
2012-06-22 16:49:12.395 媒体上传[672:707] 连接良好
2012-06-22 16:49:29.174 媒体上传[672:707] 失败并出现错误错误域=NSURLErrorDomain 代码=-1001“请求超时。”等等
我有点困惑为什么它会这么快超时。创建连接时服务器没有启动,所以我什至不确定为什么它说连接好而不是连接不太好,但这是一个不同的问题(我希望)有什么建议吗?
【问题讨论】:
【参考方案1】:所以,我怀疑答案全在语义中。
至于“连接良好”日志而不是“连接不太好”,这是因为初始化连接不会等待它在网络上执行任何操作。它确实导致它立即启动,但不是在它从 init 方法返回之前启动。
更有趣(阅读:误导)的问题是超时。我怀疑超时设置的真正含义是“如果我已经建立了连接,但服务器还没有给我响应字节”。这与“我一直在尝试,但无法连接”不同。当您以这种方式思考时,它具有一定的意义。一个超时值仅用于所有“网络”内容(路由和握手),另一个用于要处理的实际有效负载。
【讨论】:
所以为了确保我理解,基本上 15 秒的超时是因为它最初无法找到服务器,而 240 秒的超时是为了“如果我已经联系了服务器并发送了我的数据包但它在 240 秒内没有响应,然后超时。”对吗? 这是我的理解,是的。 240 秒是“连接”超时,一旦您有“连接”就适用。以上是关于NSMutableURLRequest 在大约 15 秒后超时。超时设置为 240 秒的主要内容,如果未能解决你的问题,请参考以下文章
NSMutableURLRequest 处理soap请求中的特殊字符
NSMutableURLRequest 在使用 NSURLSession 时发送 2 次