注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

倚天剑

青春要在奔跑中度过

 
 
 

日志

 
 
 
 

NSURLRequest的超时陷阱  

2013-03-19 23:23:54|  分类: 开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近被报了个问题,说我们的模块在网络情况不佳的时候,接口访问经常在那儿等待,不会超时!

第一反应去查了代码里头设置的超时时间,发现设置的是30s,但是从表现来看,确实超时时间远超30s,经常一两分钟才超时,甚至更久。也就是说, 我明明设置了NSURLRequest(NSURLConnection)的超时时间,但是他却没有超时返回!超时参数timeoutInterval没 有生效!

开始怀疑系统的问题,于是上网查,终于在StackOverFlow上有人提到说iPhone的超时时间是4分钟;继续查找,发现有人提到,在iPhone上,仅仅当你使用POST方式的时候,系统的最小超时时间会是240s。

所以做了个试验:

  1. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
  2.    NSLog(@"default time out %f(GET)", request.timeoutInterval);
  3.    request.timeoutInterval = 10;
  4.    NSLog(@"custom time out %f(GET)", request.timeoutInterval);
  5.  
  6. [request setHTTPMethod:@"POST"];
  7.    NSLog(@"time out %f(POST NO DATA)", request.timeoutInterval);
  8.  
  9. [request setValue:@"application/octet-stream" forHTTPHeaderField: @"Content-Type"]; 
  10.    NSData *data = [@"hello" dataUsingEncoding:NSUTF8StringEncoding];
  11.    NSString *postLength = [NSString stringWithFormat:@"%d", [data length]];
  12.    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
  13.    [request setHTTPBody:data];
  14.    NSLog(@"time out %f(POST WITH DATA)", request.timeoutInterval);     
  15.     
  16.    request.timeoutInterval = 10;
  17.    NSLog(@"time out %f(POST WITH DATA)", request.timeoutInterval);         
  18.     
  19.    request.timeoutInterval = 250;
  20.    NSLog(@"time out %f(POST WITH DATA)", request.timeoutInterval);

运行结果输出如图:

  1. 2011-12-22 16:36:49.681 Untitled[2474:207] default time out 60.000000(GET)
  2.     2011-12-22 16:36:49.683 Untitled[2474:207] custom time out 10.000000(GET)
  3.     2011-12-22 16:36:49.684 Untitled[2474:207] time out 10.000000(POST NO DATA)
  4.     2011-12-22 16:36:49.684 Untitled[2474:207] time out 240.000000(POST WITH DATA)
  5.     2011-12-22 16:36:49.685 Untitled[2474:207] time out 240.000000(POST WITH DATA)
  6.     2011-12-22 16:36:49.686 Untitled[2474:207] time out 250.000000(POST WITH DATA)

证实,确实在使用POST并且带有数据的情况下NSURLRequest的超时时间最短是240s!所以遇到NSURLRequest超时不返回的时候,不要再被吓到了。

说实话,还是觉得很无奈,不过据说苹果这么做的原因是,考虑到iPhone从睡眠唤醒的时候,网络的唤醒需要时间,所以做了这个设置。这个我可以理解,但是为什么不把这个写在文档里头呢!让我在被质问的时候很无语。。。

  评论这张
 
阅读(1796)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017