我正在批量上传并使用NSURLSession在后台执行此操作。 直到iOS9一切顺利,但iOS10有不同的行为:
如果我排队100个POST请求,它会将它们全部批处理到同一个套接字。
因此,所有100个请求在同一个套接字上并行发生,并在几分钟后发生超时。
在服务器端,我们正在使用AWS ELB,我猜我可以从请求标头/ ELB设置中禁用此行为。服务器本身是node.js.建议?
修改
Http header Connection: keep-alive
可能就是这样。
但我无法改变它,我发现它使用Charles代理从close
覆盖回keep-alive
。
答案 0 :(得分:0)
理论上?之一:
对于后台上传,可能唯一的选择是第一个。请注意,您应该不将每个请求发送到单独的会话,因为您最终会因TLS协商等而产生大量不必要的开销。只需将每个会话的请求数量保持在理智状态。< / p>
但是,我怀疑这些方法中的任何一种都会对你有所帮助。无论是一个插座还是十个插座,您遇到的问题都是蜂窝网络无法长时间保持连接打开,或者亚马逊的服务器/路由器不愿意这样做。
因此,真正的修复几乎肯定涉及正确的重试逻辑。
但是当你说“在同一个插槽上并行”时,我有点困惑。除非启用HTTP流水线操作,否则这是不可能的,即使在iOS 10中也不是默认的AFAIK。确保您没有错误地打开它。
答案 1 :(得分:0)
最后,我们使用http标头Connection
解决了这个问题。
iOS使用其Keep-Alive
选项,这意味着您可以在同一个套接字上发送多个请求。关闭流水线操作和设置标头值都不能删除它。 iOS迫使它。 因此我们最终将其从服务器的响应中删除。它导致iOS每个请求打开一个新套接字。
这样我们就可以回到与NSURLSession
号匹配的多个连接。允许我们在iOS 10&amp ;;上传下一堆大文件。 11&#39;测试版。