【问题标题】:NSMutableURLRequest time out intervalNSMutableURLRequest 超时间隔
【发布时间】: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 服务的适当超时。

标签: ios objective-c nsmutableurlrequest


【解决方案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];
    

    【讨论】:

    • 设置超时不是问题,超时的行为才是问题。
    猜你喜欢
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2015-09-14
    相关资源
    最近更新 更多