В al oop я получаю примерно 1000 запросов GET. Поскольку запросов слишком много, и шлюз не может их обработать, он выдает ошибку с кодом 502. Как лучше всего решить эту проблему. Мой код, как показано ниже.
//In the array there are about 10000 ids
for id in Array {
Network.shared.getData(accountId: id ?? "", successBlock: {(result) in
//Save results to coredata
}) {(errorCode:Int, error:String) in
print(errorCode, error)
}
}
Моя одиночная сеть позже, я буду вызывать в приведенном выше методе, как показано ниже.
class Network: NSObject {
//These blocks catches success & failures
typealias SuccessBlock = (Any) -> Void
typealias FailureBlock = (_ errorCode: Int, _ error: String) -> Void
private static var networkCalls: Network?
private override init() {}
public static var shared: Network {
if networkCalls == nil {
networkCalls = Network()
}
return networkCalls!
}
private lazy var configurationManager: URLSession = {
let configuration = URLSessionConfiguration.default
configuration.allowsExpensiveNetworkAccess = true
configuration.allowsConstrainedNetworkAccess = true
configuration.allowsCellularAccess = true
configuration.timeoutIntervalForRequest = 60
configuration.timeoutIntervalForResource = 60
configuration.httpMaximumConnectionsPerHost = 2
let manager = URLSession(configuration: configuration)
return manager
}()
Внутри указанного выше класса я использую метод generi c для вызова HTTP-запроса (здесь я не показываю полный метод со всеми параметрами, но вы можете понять, как он выглядит)
private func performWebServiceRequest(with url: URL, contentType: CONTENT_TYPE? = nil, requestOptions: [String: String]?,successBlock: @escaping SuccessBlock, failureBlock: @escaping FailureBlock) {
let request = NSMutableURLRequest(url: url)
request.httpMethod = requestType // As in "POST", "GET", "PUT" or "DELETE"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
let task = configurationManager.dataTask(with: request as URLRequest) { (data, response, error) in
guard let data: Data = data, let response: URLResponse = response, error == nil else
{return}
do {
let result = try JSONDecoder().decode(type, from: data)
successBlock(result)
} catch {
failureBlock(0,errorMessage)
}
}
task.resume()
}