2

アプリでネットワーク速度を計算しようとしているので、そのようなネットワーク条件でアップロードできる量のデータしかアップロードできません。そのための私の計画は次のとおりです。

  1. 私のアプリのデフォルト速度は (500KB/s) かもしれません。
  2. 私のアプリは、500kb のデータを持つリクエストを送信します。
  3. システムがデータをアップロードして応答を取得するのにかかる往復時間を監視します。たとえば、アプリが 5 秒で 200kb のデータを受信した場合、速度は (500+200)/5 になります。
  4. 上記の例によると、私の帯域幅はそのリクエストに対して 140KB/s です。
  5. 帯域幅から指数移動平均を計算します。
  6. 計算された平均帯域幅に基づいて、次のリクエストを送信します。

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 かもしれません) を送信できるので、その時点でネットワーク状態が改善され、より高い帯域幅を取得できるということです。

4

1 に答える 1