网络任务重启后哪些错误?

时间:2016-07-19 14:33:13

标签: ios networking nsurlsession

现在我正在尝试为我的应用构建网络系统。我希望我的网络操作能够在网络故障后重试自己。这就是Apple对此类行为的评论(Designing for Real-World Networks):

  

对于用户要求的请求:

     

始终尝试建立连接。不要试图猜测网络服务是否可用,并且不要缓存该确定。   如果连接失败,请使用SCNetworkReachability API来帮助诊断故障原因。然后:

     
      
  • 如果连接因瞬态错误而失败,请尝试重新建立连接。
  •   
  • 如果由于主机无法访问而导致连接失败,请等待SCNetworkReachability API调用已注册的回调。当主机再次可以访问时,您的应用程序应该在没有用户干预的情况下自动重试连接尝试(除非用户已采取某些操作来取消请求,例如关闭浏览器窗口或单击取消按钮)。
  •   

我成功地实现了这个功能,但是我确实遇到了“瞬态错误”的麻烦。

现在我在收到NSURLErrorNotConnectedToInternetNSURLErrorNetworkConnectionLostNSURLErrorInternationalRoamingOffNSURLErrorCallIsActiveNSURLErrorDataNotAllowedNSURLErrorTimedOut和HTTP后重试任务状态代码的范围是500 ... 599,但我不确定这些是否足够。

我很高兴听到来自更有经验的开发人员的建议,他们也使用了重试行为。你如何决定何时重试任务,何时不重新开始?

提前致谢!

2 个答案:

答案 0 :(得分:4)

NSURLErrorNetworkConnectionLost :瞬态错误。立即再试或短暂延迟后再试。

NSURLErrorNotConnectedToInternet :在没有连接时返回。在再次尝试之前等待可达性改变。

NSURLErrorInternationalRoamingOff :当您处于关闭数据漫游的非家庭蜂窝连接时返回。在再次尝试之前等待可达性改变。

NSURLErrorCallIsActive :当用户正在通话时返回。在再次尝试之前等待可达性改变。

NSURLErrorDataNotAllowed :仅当您明确表示您的请求不应通过蜂窝网络发生且用户未使用Wi-Fi时才会返回。在再次尝试之前等待可达性改变。

NSURLErrorTimedOut :当连接尝试超时等待服务器的初始响应时返回。可能是瞬态网络错误。请立即重试,但在将网络视为关闭之前将尝试次数限制为较小的数量,并等待可更改性再次尝试之前更改。可能会开始进行可达性检查并再次尝试请求。

服务器错误不太可能是暂时的,但在重试时也不太可能改变。你应该处理这些的方式取决于你的应用程序,但可能涉及存储数据并在一段时间后再次尝试,告诉用户服务器已损坏(如果用户可能能够做一些事情),自动发送您服务器团队的故障单等。

答案 1 :(得分:0)

NSURLErrorCallIsActive不应该在最近的设备上发生(对于那些在您打电话时无法访问数据的设备);如果它发生,你可以重试说每5秒钟,直到用户挂机。

NSURLErrorNotConnectedToInternet,NSURLErrorInternationalRoamingOff,NSURLErrorDataNotAllowed可能需要一些用户操作。除非您先告诉用户,否则重试毫无意义。

NSURLErrorNetworkConnectionLost,NSURLErrorTimedOut和范围500-599,您可以重试,但不要太频繁。 "连接丢失"应该改为"没有连接"或者在你重试时应该工作。考虑一下" Timed Out"通常需要很长时间(默认为60秒),因此您只想在后台操作时重试。 500可能是您的代码中的错误。或者它们可能是需要重新启动服务器的东西,因此请在大量时间后重试。