NSURLSession - 请求超时

时间:2016-09-13 15:42:32

标签: objective-c nsurlsession

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

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

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

或者它是服务器问题?我以为我的服务器最初是关闭的。我无法连接到它,也无法加载某些页面。然而,这对我来说只是失败了。重启我的调制解调器后,我可以连接回服务器。我没有连接到phpMyAdmin的任何问题。

1 个答案:

答案 0 :(得分:0)

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

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

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

  • 因为您说重新启动调制解调器修复了问题,这可能意味着您的调制解调器停止响应DHCP请求或DNS查询(对于您的域或其中一个强制门户网站测试域)。

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

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

  • 当状态防火墙失去理智并忘记状态时,我也看到了这一点。

  • 如果您的防火墙阻止了告诉您连接已被远程关闭的数据包,则还可能导致HTTP / HTTPS连接保持活动状态超过服务器放弃并断开连接的点。端。

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

  • 如果您的网络代码在OS X上运行,您可以在网络接口上使用tcpdump执行此操作。

  • 如果您在iOS上这样做,您可以通过有线以太网连接您的计算机,通过Wi-Fi实现网络共享,将tcpdump指向网桥接口,并将iPhone指向该Wi-Fi网络

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