• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 大数据后台上传

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:05:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我需要将大量照片从我的 iOS 设备上传到服务器。例如,500 张照片。我应该怎么做才对?

我为每张照片创建了带有 NSURLSession 后台 session 配置的上传任务。我尝试制作自己的自定义队列,其中每个下一个任务都会在前一个任务完成后启动。但是有一段时间没有开始新的任务。我猜,因为这一切都发生在幕后。有关此问题的更多信息,您可以阅读 here

(如果使用队列的方法是正确的,请您建议异步任务队列的良好实现,因为我可能在我的实现中搞砸了一些东西)

所以在上面链接的文章之后,我的猜测是我应该立即开始所有上传任务(而不是一个接一个)。但我有效率问题。如果我为每张照片创建一个任务,它将有 500 个后台异步任务和大约 1 GB 的并行数据上传。我想,这会导致网络出现一些问题。

综上所述,在 iOS 中后台上传大量数据(我的例子是 500 张照片)哪种方式才是正确的?



Best Answer-推荐答案


不幸的是,由于糟糕的设计决策,Apple 的 API 在这项任务中表现糟糕。您面临几个主要障碍:

  • 您可以同时创建的任务数量是有限制的。我认为性能在大约 100 个任务的某个位置开始下降。
  • 操作系统唤醒您的应用的频率是有限制的。它唤醒您的应用的频率越高,再次唤醒之前等待的时间就越长。在某些时候,这将导致无法安排新任务。
  • 如果发生故障,上传不会从中断的地方继续;他们重新启动。这可能会导致在糟糕的网络上产生巨大的带宽成本。

我怀疑最好的方法是:

  • 将请求分成几个大组,每个组都可以写入一个 ZIP 存档,该存档既不会大到用户用完磁盘空间,也不会小到上传速度过快。
  • 将第一组这些文件写入单个文件(例如,以 ZIP 格式)。
  • 在服务器端使用自定义脚本,让您可以通过添加额外的 CGI 参数从中断的地方继续上传。
  • 失败时,询问服务器它得到了多少数据,然后截断文件的前面并从当前位置重新上传。
  • 成功后,计算第一个大文件完成上传的速度,如果不是 O(分钟),则合并接下来的几组。将集合写入文件,并开始下一个请求。

需要注意的是,所有这些都必须相当快地完成。您可能会发现有必要提前将文件预先组合到 ZIP 存档中,以免被杀死。但是不要试图将它们合并到一个文件中,因为这样在重试时截断头部会花费太长时间。 (从表面上看,您还可以提供任何参数作为 URL 的一部分,并使 POST 正文成为原始数据,并提供一个文件流以从偏移量开始的 ZIP 存档中读取。)

如果您还没有用头撞墙,那么您很快就会。 :-)

关于ios - 大数据后台上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45011360/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap