尝试获取上载字节时URLSession的意外行为

时间:2016-03-04 09:14:29

标签: ios swift nsurlsession nsurlsessionconfiguration nsurlsessiontask

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

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

0 个答案:

没有答案