iOS网络 - HTTP连接&在后台运行

问题描述:

我有一个应用程序,让用户发送图像的消息。用户可能会点击发送,然后立即关闭手机或切换到其他应用程序。iOS网络 - HTTP连接&在后台运行

我们遇到了一个问题,如果暂时出现网络连接不良,则该消息将无法发送。我们切换到使用NSURLSession backgroundConfigurationWithIdentifier,以便后台应用程序不会立即超时运行请求。我们转而将其用于所有api请求,认为如果应用程序在错误的时间关闭,就不会因为每个请求能够在后台继续执行而受到伤害。

快进了几个星期,我们注意到所有请求看起来都很慢。使用wireshark我刚发现这个后台会话似乎每个请求都使用一个新的http连接,这意味着它需要为每个请求设置一个TCP连接和新的TLS握手,这会在我们的应用程序的每个请求中增加~500ms的延迟。这是一个很大的交易,但我无法在任何地方找到这种行为,包括上面的链接或Apple的background transfer considerations

所以我的问题是,这是行为预期,还是我在某处做错了什么?有没有一种简单的方法用NSURLSession来创建一个HTTP请求,如果有的话,它将使用现有的保持连接的连接,但如果应用程序移动到后台,可以回退到backgroundConfiguration?

NSURLSession是实现您的用例的推荐方式。您是否尝试设置backgroundSessionConfig.discretionary = true

iOS Reference

确定是否后台任务可以 计划在系统的最佳性能的*裁量权一个布尔值。

如果这没有帮助,我建议在iOS上申请bug

+0

我尝试过'discretionary = true',但它也不起作用。我不确定,但我读了这个选项意味着它可能会延迟请求的运行,如果它在后台并且iOS很忙,我不希望它在应用程序处于前台时有任何影响。我已经向苹果提交了一个错误,我们会看到他们说的。 – danny