Очень редко и время от времени у нас возникали проблемы с тайм-аутом по некоторым нашим запросам. Воспроизвести его сложно, так как это происходит просто из ниоткуда и при повторной попытке (повторная отправка запроса с помощью точно такого же действия, как нажатие кнопки), мы, скорее всего, успешно вернем ответ. Это произошло на разных устройствах.
Здесь информация о нашей платформе:
XCode 10.1
Swift 4.2
Alamofire 4.8.1
PromiseKit 6.8.3
Вот один из примеров наших запросов:
public class NetworkingHelpers {
// MARK: Singleton
public static let shared = NetworkingHelpers()
private let alamofireManager: SessionManager
// MARK: Init
private init() {
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 30
configuration.timeoutIntervalForResource = 30
alamofireManager = Alamofire.SessionManager(configuration: configuration)
}
public func makePublicRequest<T: Decodable>(url: String, decodeAsType: T.Type, method: HTTPMethod = .get,
params: [String: Any]? = nil) -> Promise<T> {
return alamofireManager.request(url, method: method, parameters: params, encoding: JSONEncoding.default, headers: self.anonymousHeaders)
.response(.promise)
.recover(policy: .allErrorsExceptCancellation) { error -> Promise<(URLRequest, HTTPURLResponse, Data)> in
// This is a error thrown by the alamofireManager, but not from the server
// Most likely it is a timeout
let e = error as NSError
throw RequestErrorUtils.generateRequestError(e.code)
}
.then { (request, response, data) -> Promise<T> in
// Process response
}
}
Если тайм-аут, Alamofire
выдает нам код ошибки -1001
, который является ошибкой тайм-аута 30 секунд. Это также означает, что alamofireManager
обработал запрос, который мы сделали.
Это происходит очень случайно, и, как мы уже упоминали, в большинстве случаев оно будет успешным при повторной попытке вручную. Нам не удалось захватить какие-либо журналы со стороны нашего сервера. У нас есть несколько гипотез по этому вопросу.
- iOS глючит, когда теряет запросы случайным и случайным образом
- Alamofire глючит, когда он теряет запросы случайно и время от времени
- Наша сеть падает случайно и время от времени
- Наш сервер не может отвечать случайно и время от времени
Мы также будем использовать Netfox
для отслеживания запросов от наших устройств, чтобы мы могли сузить проблему.
У кого-нибудь были подобные проблемы раньше?
Спасибо!