Ios 尝试上载字节时URLSession的意外行为
我的应用程序一直在与服务器通信,我想计算得到的带宽。为此,我决定计算上传和下载速度 我正在使用NSURLSession与服务器通信。我正在做的是:在我恢复会话任务时存储时间戳(例如Time1)。在Ios 尝试上载字节时URLSession的意外行为,ios,swift,nsurlsession,nsurlsessionconfiguration,nsurlsessiontask,Ios,Swift,Nsurlsession,Nsurlsessionconfiguration,Nsurlsessiontask,我的应用程序一直在与服务器通信,我想计算得到的带宽。为此,我决定计算上传和下载速度 我正在使用NSURLSession与服务器通信。我正在做的是:在我恢复会话任务时存储时间戳(例如Time1)。在URLSession(session:NSURLSession,task:NSURLSessionTask,didSendBodyData bytesSent:Int64,totalBytesSent:Int64,totalBytesExpectedToSend:Int64)方法中,当totalByte
URLSession(session:NSURLSession,task:NSURLSessionTask,didSendBodyData bytesSent:Int64,totalBytesSent:Int64,totalBytesExpectedToSend:Int64)
方法中,当totalBytesSent超过或等于ExpectedByTestOsent时,我从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