アプリでネットワーク速度を計算しようとしているので、そのようなネットワーク条件でアップロードできる量のデータしかアップロードできません。そのための私の計画は次のとおりです。
- 私のアプリのデフォルト速度は (500KB/s) かもしれません。
- 私のアプリは、500kb のデータを持つリクエストを送信します。
- システムがデータをアップロードして応答を取得するのにかかる往復時間を監視します。たとえば、アプリが 5 秒で 200kb のデータを受信した場合、速度は (500+200)/5 になります。
- 上記の例によると、私の帯域幅はそのリクエストに対して 140KB/s です。
- 帯域幅から指数移動平均を計算します。
- 計算された平均帯域幅に基づいて、次のリクエストを送信します。
NSURLSession の実装は次のとおりです。
//Initializing NSURLSession [one time only]
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("com.test.ios.background")
self.backgroundSession = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
// Create session task:
var urlSessionTask = self.backgroundSession.uploadTaskWithRequest(request, fromFile: NSURL.fileURLWithPath(filePath!)) urlSessionTask.resume()
let requestStartTime = NSDate().timeIntervalSinceReferenceDate
//On didCompleteWithError calculating speed.
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
let downloadEndTime = NSDate().timeIntervalSinceReferenceDate
let networkSpeed = Int(Double(sessionTask.receivedData.length + task.countOfBytesSent) / (downloadEndTime - requestStartTime))
}
帯域幅を失うと、平均が下がるので、このアプローチを使用してそれを見つけることができますが、問題は、帯域幅が低くなり、ネットワーク状態が改善されるよりも、送信するデータが少なくなるため、帯域幅が改善されないことです。帯域幅が低いと言い続けます。
ネットワークの状態が改善され、より多くのデータを送信できるかどうかを確認する方法はありますか?
私の頭にある解決策の 1 つは、10 回のリクエストごとに最大データ (500KB かもしれません) を送信できるので、その時点でネットワーク状態が改善され、より高い帯域幅を取得できるということです。