我的应用程序不断与服务器通信,我想计算我得到的带宽。为此,我决定计算上传和下载速度。
我正在使用NSURLSession与我的服务器通信。我正在做的是:当我恢复会话任务时存储时间戳(例如,Time1)。在URLSession(session: NSURLSession, task: NSURLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64)
方法中,当totalBytesSetnt超过或等于expecetedBytesToSent时,我得到Time1
到当前时间的差异,这样我就可以计算上传速度。
这是我的代码:
//Initializing NSURLSession
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("com.test.ios.background")
var backgroundSession = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
// Create session task:
var urlSessionTask = self.backgroundSession.uploadTaskWithRequest(request, fromFile: NSURL.fileURLWithPath(filePath!))
urlSessionTask.resume()
let time1 = NSDate().timeIntervalSinceReferenceDate
这里我在恢复会话任务后立即捕获了time1。
func URLSession(session: NSURLSession, task: NSURLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
if totalBytesSent >= totalBytesExpectedToSend {
let time2 = NSDate().timeIntervalSinceReferenceDate
let uploadSpeed = Int(Double(totalBytesSent) / (time2 - time1))
}
}
我在代码中进一步使用此上传速度。我每次都使用新的会话任务发送相同的JSON数据(如上所述)。问题是: 在第一次请求会话上需要一些时间来上传数据,但之后无论我在哪种网络速度下花费的时间都会少得多。 (使用网络链路调节器来改变网络)。
以下是样本:
1st Request: Bytes uploaded: 11492 in 1.62111800909042 seconds
2nd Request: Bytes uploaded: 11492 in 0.00142198801040649 seconds
3rd Request: Bytes uploaded: 11492 in 0.00102704763412476 seconds
4th Request: Bytes uploaded: 11492 in 0.00102400779724121 seconds