2016-08-31 27 views
2

我有一個應用程序,讓用戶發送圖像的消息。用戶可能會點擊發送,然後立即關閉手機或切換到其他應用程序。iOS網絡 - HTTP連接&在後臺運行

我們遇到了一個問題,如果暫時出現網絡連接不良,則該消息將無法發送。我們切換到使用NSURLSession backgroundConfigurationWithIdentifier,以便後臺應用程序不會立即超時運行請求。我們轉而將其用於所有api請求,認爲如果應用程序在錯誤的時間關閉,就不會因爲每個請求能夠在後臺繼續執行而受到傷害。

快進了幾個星期,我們注意到所有請求看起來都很慢。使用wireshark我剛發現這個後臺會話似乎每個請求都使用一個新的http連接,這意味着它需要爲每個請求設置一個TCP連接和新的TLS握手,這會在我們的應用程序的每個請求中增加~500ms的延遲。這是一個很大的交易,但我無法在任何地方找到這種行爲,包括上面的鏈接或Apple的background transfer considerations

所以我的問題是,這是行爲預期,還是我在某處做錯了什麼?有沒有一種簡單的方法用NSURLSession來創建一個HTTP請求,如果有的話,它將使用現有的保持連接的連接,但如果應用程序移動到後臺,可以回退到backgroundConfiguration?

回答

0

NSURLSession是實現您的用例的推薦方式。您是否嘗試設置backgroundSessionConfig.discretionary = true

iOS Reference

確定是否後臺任務可以 計劃在系統的最佳性能的自由裁量權一個布爾值。

如果這沒有幫助,我建議在iOS上申請bug

+0

我嘗試過'discretionary = true',但它也不起作用。我不確定,但我讀了這個選項意味着它可能會延遲請求的運行,如果它在後臺並且iOS很忙,我不希望它在應用程序處於前臺時有任何影響。我已經向蘋果提交了一個錯誤,我們會看到他們說的。 – danny