Ole*_*man 1 networking ios nsurlsession
现在我正在尝试为我的应用程序构建网络系统。我希望我的网络操作能够在网络故障后重试。这就是苹果对这种行为的看法(为真实世界网络设计):
对于应用户要求提出的请求:
始终尝试建立连接。不要试图猜测网络服务是否可用,也不要缓存该决定。如果连接失败,请使用 SCNetworkReachability API 来帮助诊断失败的原因。然后:
- 如果连接因暂时错误而失败,请尝试重新连接。
- 如果连接因主机不可达而失败,请等待 SCNetworkReachability API 调用您注册的回调。当主机再次可访问时,您的应用程序应在无需用户干预的情况下自动重试连接尝试(除非用户已采取某些操作取消请求,例如关闭浏览器窗口或单击取消按钮)。
我成功地实现了这个功能,但是我在决定什么是“瞬时错误”时遇到了麻烦。
现在,我在收到NSURLErrorNotConnectedToInternet, NSURLErrorNetworkConnectionLost, NSURLErrorInternationalRoamingOff, NSURLErrorCallIsActive, NSURLErrorDataNotAllowedorNSURLErrorTimedOut和 500…599 范围内的 HTTP 状态代码后重试任务,但我不确定这些是否足够。
我很高兴听到更有经验的开发人员的建议,他们也使用重试行为。您如何决定何时重试任务,何时不重试?
提前致谢!
NSURLErrorNetworkConnectionLost:在暂时错误后返回。立即重试或在短暂延迟后重试。
NSURLErrorNotConnectedToInternet:没有连接时返回。在重试之前等待可达性改变。
NSURLErrorInternationalRoamingOff:当您处于非家庭蜂窝连接且数据漫游关闭时返回。在重试之前等待可达性改变。
NSURLErrorCallIsActive:当用户在不支持同步语音和数据的网络上通话时返回。在重试之前等待可达性改变。
NSURLErrorDataNotAllowed:仅当您明确表示您的请求不应通过蜂窝网络发生并且用户不在 Wi-Fi 上时才返回。在重试之前等待可达性改变。
NSURLErrorTimedOut:当连接尝试超时等待来自服务器的初始响应时返回。可能是暂时的网络错误。立即重试,但将尝试次数限制为较小的次数,然后将网络视为关闭并等待可达性更改后再重试。可能开始可达性检查并并行再次尝试请求。
服务器错误不太可能由网络故障引起,也不太可能在立即重试时发生变化。你应该处理这些的方式取决于你的应用程序,但可能涉及存储数据并在一段时间后重试,告诉用户服务器坏了(如果用户可以做些什么),自动发送您的服务器团队的故障单等。