最近我在Iphone中开发了一个简单的文件下载应用程序。我在Iphone 3gs中测试了这个,发现了一些有趣的东西。
我开始下载文件时关闭应用程序。我在一段时间后(比如6秒)打开了应用程序,下载实际上是从它留下的地方开始的。
该软件如何能够暂停和恢复http下载。 (我的tomcat服务器没有任何流媒体或恢复功能)
我的设置, Tomcat,带有一个Servlet,它基本上从文件系统读取并发送出去。 Iphone 3gs和简单的文件下载应用程序,我没有启用任何UIBackgroundModes。添加进度条以表示状态
答案 0 :(得分:2)
您目击的是连接超时未在您的应用未激活期间触发的问题。更详细一点:
当你打开一个连接并开始在它上面传输数据时,操作系统会与连接关联一个超时(也就是90秒,60秒,300秒,这取决于你通常可以调整的一些设置,尽管并非总是很容易);
此超时用于监控连接状态;如果没有数据传输超过超时的时间,则认为连接已断开,或者假设已被另一方关闭;
这是必要的,因为远程连接的质量变化很大,如果您检查转移,您会发现它们可以“轻松”停止几秒钟,甚至更多;
如果数据传输暂停一段时间,但在连接超时之前恢复,网络协议(所有这些,客户端和服务器端)都可以按照设计恢复数据传输没有中断(网络协议具有处理这一问题的特定功能,例如将数据分块为较小的数据包并对每个数据包进行编号以确保所有数据包都被传输,并且如果有任何误入歧途,可以根据发送顺序重新排列它们沟通);
所以这应该可以解释这样一个事实,即你的应用程序在停止6秒后确实恢复了连接顺利。
如果您让app关闭了一段时间,您会发现连接会中断。
答案 1 :(得分:0)
将大数据分成小部分是HTTP标准的基本特征。有关详细信息,请参阅HTTP1.1 - Section 14.16 - Content-Range。 Cocoa实现很可能默认处理所有这些。在传输过程中将缓存大量下载,并根据请求自动恢复。
服务器和iPhone实际上并不需要任何额外的软件来支持此功能。在HTTP通信的上下文中,每个下载只是从服务器发出的许多数据包,并且这些数据包中的任何一个都可能需要很长时间才能真正到达接收设备。恢复下载实际上只是相同的下载,数据包之间的延迟非常长。