【问题标题】:Iphone capable to pause and resume downloading of files automactically in a multitasking enviromentIphone 能够在多任务环境中自动暂停和恢复文件下载
【发布时间】:2011-05-28 06:58:40
【问题描述】:

最近我在 Iphone 中开发了一个简单的文件下载应用程序。我在 Iphone 3gs 中对此进行了测试,发现了一些有趣的东西。

当它开始下载文件时,我关闭了应用程序。我在一段时间后(比如 6 秒)打开了应用程序,下载实际上是从它离开的地方开始的。

该软件如何能够暂停和恢复 http 下载。 (我的 tomcat 服务器没有任何流媒体或恢复能力)

我的设置, Tomcat ,带有一个基本上从文件系统读取并发送出去的 Servlet。 Iphone 3gs 和简单的文件下载应用程序,我没有启用任何 UIBackgroundModes。添加进度条以表示状态

【问题讨论】:

    标签: iphone http ios4 comet


    【解决方案1】:

    您所看到的是在您的应用未激活期间连接超时未触发的问题。更详细一点:

    1. 当您打开一个连接并开始通过它传输数据时,操作系统会与该连接关联一个超时(例如 90 秒、60 秒、300 秒,具体取决于您通常可以调整的某些设置,尽管并不总是那么容易);

    2. 这个超时用来监控连接状态;如果超过超时时间没有数据传输,则认为连接断开,或者认为已被对方关闭;

    3. 这是必要的,因为远程连接的质量参差不齐,如果您检查传输,您会发现它们可以“轻松”停止几秒钟甚至更长时间;

    4. 如果数据传输停止了一段时间,但在连接超时触发之前恢复,则网络协议(所有这些,客户端和服务器端)能够按照设计恢复数据传输没有中断(网络协议具有处理此问题的特定功能,例如将您的数据分块为较小的数据包并对每个数据包进行编号以确保所有数据包都被传输,并且如果有任何东西误入歧途,可以根据发送顺序重新排列它们通信);

    因此,这应该可以解释这样一个事实,即您的应用在暂停 6 秒后确实恢复了连接而没有出现故障。

    如果您让您的应用关闭较长时间,您会看到连接会中断。

    【讨论】:

      【解决方案2】:

      将大数据分成小部分是 HTTP 标准的基本功能。有关详细信息,请参阅HTTP1.1 - Section 14.16 - Content-Range。默认情况下,Cocoa 实现很可能会处理所有这些。大型下载将在传输过程中被缓存,并根据请求自动恢复。

      服务器和 iPhone 并不需要任何额外的软件来支持此功能。在 HTTP 通信的上下文中,每个下载只是从服务器发出的一些数据包,这些数据包中的任何一个都可能需要很长时间才能真正到达接收设备。恢复下载实际上只是相同的下载,数据包之间的延迟异常长。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        • 2017-02-15
        • 2021-07-07
        • 1970-01-01
        相关资源
        最近更新 更多