我们已经构建了一个内部企业 iPad2+ 应用程序,该应用程序连接到 Drupal CMS,内容(文本/图像/视频)通过 REST API 传送到应用程序。
当用户首次启动应用程序时,系统会提示他们通过 WIFI 网络下载内容。我们遇到内容无法下载不一致的问题,即有时 60 张图片无法下载;其他时候 20 张图片失败。由于我们已将视频添加到下载组合中,因此内容失败的频率更高。
服务器详情:
- 视窗服务器
- IIS7.5
- PHP 5.3
- MYSQL5.1
应用详情:
- Require.js: 提供 JavaScript 文件和模块加载
- Backbone.js: 提供前端 JavaScript 应用程序框架
- Cordova (v2.7.0): 用于提供在 iOS 上运行的环境
- Raphael.js: 用于程序图形和动画
- jQuery 和插件: 用于 Dom 操作、动画和交互
- Bootstrap: HTML 标记的基本框架
下载过程如下:
- 用户启动应用程序并被提示下载内容
- 下载开始
- 该应用程序现在对 REST API 进行 AJAX 调用以获取内容
- 成功获取后,REST API 会提供一系列内容(文本/图像/视频) - 最大视频文件大小 11mb
- 内容同步交付
我们可以添加逻辑以在失败时继续重试,但这可能会导致无限循环。内容下载大小约为。50mb,通过WIFI。
我们的测试:
- 我们在世界上 3 个不同的地方进行了尝试:南非、英国和美国以及类似的问题。
- 我们已经在同一台 iPad 上从同一台服务器测试了 300mb 的下载,并且下载正常
问题:
- 谁能告诉我们为什么这会失败?
- 问题可能出在我们缺少的 Drupal 配置问题上吗?
8 月 25 日更新:
我们做了更多的研究,似乎问题可能是 iOS Safari 在 60 秒时超时的结果,然后在下载之后一切都失败了 - 请参阅此处:http://www.sencha.com/forum/showthread。 php?111231-iOS-Safari-Mobile-AJAX-超时
有没有其他人遇到过这个问题?
我们已经尝试通过 LAN 下载,这 100% 没问题。WIFI是问题。
我们尝试在 x 秒后刷新下载脚本并重置超时计数器。我们已尝试检测下载是否失败并继续重试。
此刻愣住了……
8 月 28 日更新的解决方案:
更新的解决方案:我们已经解决了这个问题。问题根本在于 iOS Safari 在60secs时超时。为什么?我们不知道......我们所做的是获取要下载的完整列表文件,然后同步下载它们。60 秒时发生的事情是下载超时,我们丢失了文件列表。我们解决这个问题的方法是,我们在 60 秒时保存了未下载的文件列表,然后使用这个新列表再次开始下载过程,并重复此过程,直到所有文件成功下载。