1

我的应用程序不断与服务器通信,我想计算我得到的带宽。为此,我决定计算上传和下载速度。

我正在使用 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
4

0 回答 0