最近在Iphone开发了一个简单的文件下载应用。我在 Iphone 3gs 上对此进行了测试,发现了一些有趣的东西。
当它开始下载文件时,我关闭了应用程序。一段时间后(比如 6 秒)我重新打开应用程序,下载实际上是从它留下的地方开始的。
软件如何能够暂停和恢复http下载。 (我的tomcat服务器没有任何流或恢复能力)
我的设置, Tomcat,带有一个基本上从文件系统读取并发送的 Servlet。 Iphone 3gs 和简单的文件下载应用程序,我没有启用任何 UIBackgroundModes。添加一个进度条来表示状态
最佳答案
您所看到的是在您的应用未处于事件状态期间未触发连接超时的问题。更详细一些:
当您打开一个连接并开始通过它传输数据时,操作系统会将超时关联到该连接(例如 90 秒、60 秒、300 秒,具体取决于您通常可以调整的某些设置,尽管并不总是那么容易);
此超时用于监视连接状态;如果超过超时时间仍未传输数据,则认为连接已断开,或者假定已被另一方关闭;
这是必要的,因为远程连接的质量变化很大,如果您检查您的传输,您会注意到它们可以“轻松”停止几秒钟,甚至更长时间;
如果数据传输停止了一段时间,但在连接超时触发之前又恢复了,网络协议(protocol)(所有这些协议(protocol),客户端和服务器端)都可以按照设计来恢复数据传输,就像之前那样没有中断(网络协议(protocol)具有处理此问题的特定功能,例如将数据分块为更小的数据包并为每个数据包编号以确保所有数据都被传输,并且如果有任何误入歧途,可以根据发送顺序重新排列它们通信);
因此,这应该可以解释您的应用在暂停 6 秒后确实恢复连接的事实。
如果您让您的应用关闭较长时间,您会发现连接会中断。
关于Iphone 能够在多任务环境中自动暂停和恢复文件下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6160170/