我正在尝试在我的应用程序中计算网络速度,因此我只能上传在这种网络条件下可以上传的那么多数据。为此,我的计划是:
- 我的 App 会有一个默认的速度可能是(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))
}
如果我失去带宽,我可以使用这种方法找到它,因为我的平均带宽下降,但问题是一旦我达到低带宽并且我的网络条件得到改善,我的带宽将不会得到改善,因为我不断发送更少的数据在请求中,它会一直说带宽很低。
有什么方法可以找到我的网络状况是否得到改善并且可以发送更多数据?
我想到的一个解决方案是,我可以在每 10 个请求中发送最大数据(可能是 500KB),这样我就可以在网络条件得到改善的情况下获得更高的带宽。