Ios 如何在NSURLSession中禁用每个套接字的多个请求?
我正在做批量上传,并使用NSURLSession在后台完成。 在iOS9之前,一切都很顺利,但iOS10有一个不同的行为: 如果我将100个POST请求排队,它会将它们全部批处理到同一个套接字中 因此,所有100个请求在同一个套接字上并行发生,几分钟后超时 在服务器端,我们使用AWS ELB,我猜我可以从请求头/ELB设置中禁用此行为。服务器本身是node.js。建议 编辑: 可能是吧。 但我无法更改它,我看到它被覆盖,从Ios 如何在NSURLSession中禁用每个套接字的多个请求?,ios,http,networking,nsurlsession,amazon-elb,Ios,Http,Networking,Nsurlsession,Amazon Elb,我正在做批量上传,并使用NSURLSession在后台完成。 在iOS9之前,一切都很顺利,但iOS10有一个不同的行为: 如果我将100个POST请求排队,它会将它们全部批处理到同一个套接字中 因此,所有100个请求在同一个套接字上并行发生,几分钟后超时 在服务器端,我们使用AWS ELB,我猜我可以从请求头/ELB设置中禁用此行为。服务器本身是node.js。建议 编辑: 可能是吧。 但我无法更改它,我看到它被覆盖,从close返回到keep-alive使用Charles代理。理论上?要么:
close
返回到keep-alive
使用Charles代理。理论上?要么:
- 使用多个会话。NSURLSession不跨会话边界共享连接
- 使用外部队列(例如NSOperationQueue)限制添加到单个会话的并发请求数
但是当你说“在同一个插座上并行”时,我有点困惑。除非启用HTTP管道,否则这是不可能的,即使在iOS 10中,默认情况下也不会启用HTTP管道。请确保您没有错误地打开它。最终,我们使用http头解决了这个问题 iOS使用其
保持活动状态
选项,这意味着您可以在同一个套接字上发送多个请求。无论是关闭管道还是设置标头值都无法删除它。我强迫它因此我们最终将其从服务器的响应中删除。它导致iOS每个请求打开一个新套接字
通过这种方式,我们回到了一个与号码
nsursession
匹配的连接号码。允许我们在iOS 10和11的beta版后台上传大量大文件。谢谢!看起来,即使我确保管道关闭,这种情况也会发生。而且,它看起来像是iOS内部的bug,因为它并没有发生在iOS9上。最终我们发现,当不允许http保持活动状态时,我们可以解决这个问题。我会补充一个完整的答案