NSURLSession - 请求超时

Posted

技术标签:

【中文标题】NSURLSession - 请求超时【英文标题】:NSURLSession - The request timed out 【发布时间】:2016-09-13 15:42:31 【问题描述】:

按下按钮时,我使用 NSURLSession 将数据从我的应用程序发布到我的服务器。前两次我可以成功地将数据发送到我的服务器并插入数据库,但之后的任何时候,请求都会超时。

我尝试过:更改会话配置(每个主机的连接数、timeoutInterval 等)、会话配置类型、更改数据发布方式。

以前有没有人见过这种行为并且知道如何解决这个问题?

还是服务器问题?我以为我的服务器最初已关闭。我无法连接到它,也无法加载某些页面。然而,它只对我不利。重新启动调制解调器后,我可以连接回服务器。我连接到 phpMyAdmin 没有任何问题。

【问题讨论】:

Show.Your.Code. 【参考方案1】:

如果重启路由器后问题可以重现,那么我会调查当时 Apple 的强制门户测试服务器是否已关闭。

否则,我怀疑这是网络问题,而不是您的应用程序特有的任何问题。

您成功加载的页面很可能来自缓存。

因为您说重新启动调制解调器解决了问题,这可能意味着您的调制解调器停止响应 DHCP 请求或 DNS 查找(对于您的域或强制门户测试域之一)。

您也有可能遇到丢包问题,而且您的路由器启动和运行的时间越长,情况就越严重。这可能会导致某些请求完成而其他请求失败。

有时,当 ICMP 被过于激进地阻止时,我会看到与此类似的奇怪行为。

当有状态防火墙失去理智并忘记状态时,我也看到了这种情况。

如果您的防火墙阻止了告诉您连接已被远程关闭的数据包,那么这也可能是由于在服务器放弃并断开连接的点之后保持 HTTP/HTTPS 连接处于活动状态结束。

但如果没有数据包跟踪,就无法确定。获得一个:

如果您的网络代码在 OS X 上运行,您只需在网络接口上使用 tcpdump 即可。

如果您在 ios 上执行此操作,您可以通过有线以太网连接您的计算机,通过 Wi-Fi 启用网络共享,将 tcpdump 指向桥接接口,并将您的 iPhone 指向该 Wi-Fi网络。

无论哪种方式,这都会告诉您是否有发出的请求永远不会回来,更重要的是,它们是什么类型的请求,以及谁负责回复它们。获得该信息后,如果问题的根源不明显,请发布数据包跟踪链接,我们将添加更多建议。

【讨论】:

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

NSURLSession 超时

如何在alamofire中设置请求超时?

NSURLSession访问网络数据

NSURLSession 上传任务超时

异步图像下载可以超时还是我需要 NSURLSession?

NSURLSession sharedSession 默认超时