如果连接在 Web 服务调用之间中断,如何处理应用程序

How to handle the application if connection breaks in between a web service call

在几次采访中,我被问及连接处理、Web 服务调用、服务器响应等等。到现在我还不清楚很多things.Could请你帮我更好地了解以下场景?

  1. 使用 NSURLSessionDataTask 而不是 NSURLConnection 有什么好处-我有一个想法,即使连接中断 NSURLSessionDataTask 也不会发生数据丢失但不是 latter.But 它是如何工作的?

  2. 如果在将请求发送到服务器后或连接到服务器时连接中断,我们如何在 NSURLConnectionNSURLSessionDataTask 的情况下处理代码?-我的想法是使用 Reachability 类 并检查它何时在线。

  3. 我们发送的数据已在服务器端更新。但是我们没有得到服务器的响应。我们可以做些什么来处理这种情况?- 增加 timeOutInterval 是我们唯一能做的吗?

请帮我解决这些问题。非常感谢您!!

确实有多个问题,但我会尽量简短地回答所有问题。

  1. 大多数故障处理在 NSURLConnectionNSURLSession 之间是相同的。后者的主要优点是支持后台下载和取消相关请求组。

    也就是说,如果您正在执行您认为可能会失败的大型下载,NSURLSession 会提供下载任务,让您在网络连接失败时继续下载,类似于 NSURLDownload 曾经在 OS X 上做过(在 iOS 上永远不可用)。不过,这仅有助于下载大文件,不适用于大型上传(需要大量服务器端支持才能恢复)或其他请求。

  2. 您的直觉是正确的。当连接失败时,创建一个可访问性对象来监视该特定主机名,以查看何时是再次尝试请求的好时机。然后,再次尝试请求。

    您可能还会显示某种建议 UI 表明您没有 Internet 连接。 (我所说的建议,是指用户不必点击并且不会影响离线使用该应用程序的内容;查看 Facebook 应用程序就是一个很好的例子。)

  3. 在发出请求时提供唯一标识符,并将其与服务器的响应一起存储在服务器上,直到客户端确认收到响应(或在合理的天数后清除它) ).上传完成后,如果可以,服务器会返回给您响应。

    如果出现问题,客户端会要求服务器重新发送与该唯一标识符关联的响应。一旦您的客户端获得数据,它就会确认收到并且服务器会删除响应。如果您向服务器请求响应而服务器没有响应,那么上传并未真正完成。

    通过一些额外的工作,这种方法可以更可靠地支持长运行 上传。如果上传失败,请询问服务器它为该标识符获取了多少数据,然后告诉服务器您要从下一个字节开始上传新数据。在服务器端,覆盖从该字节开始的旧数据(以防万一您要求长度时仍在写入某些数据)。

希望对您有所帮助。