Я пытаюсь вычислить скорость сети в своем приложении, поэтому я могу загрузить только ту большую часть данных, которые могут быть загружены в таких сетевых условиях. Для этого мой план:Расчет скорости сети в iOS. Время округления с меньшим количеством данных не будет информировать о точной скорости сети.
- Мое приложение будет иметь скорость по умолчанию (500KB/s).
- Мое приложение отправит запрос, который содержит 500 КБ данных.
- Он будет контролировать время прохождения в оба конца системы, чтобы загрузить данные и получить ответ. например, приложение получило 200 кб данных за 5 секунд, чем скорость (500 + 200)/5.
- В соответствии с приведенным выше примером моя пропускная способность составляет 140 КБ/с для этого запроса.
- Я буду вычислять экспоненциальную скользящую среднюю из моей полосы пропускания.
- Я отправлю следующий запрос на основе рассчитанной средней полосы пропускания.
Вот моя реализация для 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))
}
Если я потеряю пропускную способность, я могу найти его, используя этот подход, как мой средний слезть, но проблема в том, когда я достиг низкой пропускной способности и чем мои сетевые условия улучшились, моя пропускная способность не улучшится, потому что я продолжаю отправлять меньше данных в запрос, и он будет продолжать говорить о низкой пропускной способности.
Есть ли способ, по которому я могу найти, улучшилось ли состояние сети, и я могу отправить больше данных?
Одно из решений, на мой взгляд, я могу отправить максимальные данные (может быть 500 КБ) в каждый 10-й запрос, поэтому в то время я могу получить более высокую пропускную способность в сетевых условиях.
Как вы загружаете данные. Вы используете nsurlsession? можете ли вы написать код для понимания бэттера? –
@CrazyDeveloper Я добавил код для того же самого. Да, я использую 'NSURLSession' –