NSMutableURLRequest 超时间隔

Posted

技术标签:

【中文标题】NSMutableURLRequest 超时间隔【英文标题】:NSMutableURLRequest time out interval 【发布时间】:2014-12-16 05:17:34 【问题描述】:

我有 2 个独立的 NSOperationQueues,其中两个不同的 Web 服务操作并行处理。对于这两个 Web 服务,超时间隔设置为 120 秒(2 分钟)。两个网络服务都在缓慢的互联网连接期间超时,但不是在指定的 120 秒间隔。

operationqueue1 中的 WebService1 在 10:27:29(hh:mm:ss) 开始,在 10:29:51 超时,即 142 秒。

operationqueue2 中的 WebService2 同时启动,即 10:27:29(hh:mm:ss) 并在 10:30:53 超时,即 205 秒。

预计两者都会以相同的 120 秒时间间隔超时,但这并没有发生。

每当为 NSMutableURLRequest 设置超时间隔时,超时都会有一些时间延迟。为什么会发生这种情况以及如何处理。 请在这里帮助我。

【问题讨论】:

操作队列很可能在异步线程上运行,这意味着操作系统可能不是每秒都在运行该线程。是否有特定原因需要将超时时间精确到 120 秒? 只是因为用户不想等待很长时间。那么有没有办法处理这种事情? 120 超时?我希望你有具体的原因,30 秒对于移动应用程序来说已经足够了。 是的,这是有原因的。该应用程序实际上用于移动网络而不是wifi,并且在大多数情况下,它用于网络连接速度较慢的区域,而且下载的数据也足够大。 那么任何人都可以让我知道如何处理两个异步并行 Web 服务的适当超时。 【参考方案1】:

Apple Dev Forum 上有不同的讨论以及关于不遵守自定义超时间隔的堆栈溢出,我认为他们在最新的 ios 版本中解决了。 我可以建议您只创建自己的计时器并在该时间间隔后取消连接。 查看Apple forums上的讨论

【讨论】:

【参考方案2】:

您可以在创建请求时设置超时间隔,如下所示 -

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:myURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];
[myRequest setHTTPMethod:@"POST"];
[myRequest setHTTPBody:myData];

NSURLConnection *myConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

或者,您也可以像下面的语句一样设置时间 -

[request setTimeOutSeconds:1000];

【讨论】:

设置超时不是问题,超时的行为才是问题。

以上是关于NSMutableURLRequest 超时间隔的主要内容,如果未能解决你的问题,请参考以下文章

NSMutableURLRequest setTimeoutInterval 在 ios 11.0 中不起作用

NSMutableURLRequest 在大约 15 秒后超时。超时设置为 240 秒

如果数据开始加载但不是 webViewDidFinishLoad,则不会触发 NSMutableURLRequest 超时

NSURLSession访问网络数据

NSURLSession 超时

网络超时的写法