Pracuję nad projektem Swift, który wymaga dużego zużycia interfejsów API. Wszystko działa dobrze, ale czasami (1 na 20), otrzymuję błąd Code=-1001 "The request timed out."
podczas wywoływania interfejsu API.Code = -1001 "Przekroczono limit czasu żądania."
Używam Alamofire. Załączam kod do wywołania API.
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.HTTPBody = myUrlContents.dataUsingEncoding(NSUTF8StringEncoding)
request.timeoutInterval = 15
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.setValue("\(myUrlContents.dataUsingEncoding(NSUTF8StringEncoding)!.length)", forHTTPHeaderField: "Content-Length")
request.setValue("en-US", forHTTPHeaderField: "Content-Language")
Alamofire.request(request)
.validate()
.responseJSON { [weak self] response in
if response.result.isSuccess {
if let result = response.result.value {
print("Result: \(result)")
completion(result: result as! NSDictionary)
}
}
else {
print(response.debugDescription)
}
}
i dziennik jest
[Request]: <NSMutableURLRequest: 0x18855620> { URL: http://....... (url)}
[Response]: nil
[Data]: 0 bytes
[Result]: FAILURE: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSErrorFailingURLStringKey=http://.....(url) NSErrorFailingURLKey=http://.....(url), NSLocalizedDescription=The request timed out., _kCFStreamErrorDomainKey=4, NSUnderlyingError=0x18a08900 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102}}}
[Timeline]: Timeline: { "Request Start Time": 493582123.103, "Initial Response Time": 493582138.254, "Request Completed Time": 493582138.254, "Serialization Completed Time": 493582138.256, "Latency": 15.151 secs, "Request Duration": 15.151 secs, "Serialization Duration": 0.002 secs, "Total Duration": 15.153 secs }
wiem, że mogę zwiększyć limit czasu, aby uniknąć błędu. Ale chcę znać faktyczny powód, dla którego wyrzuca błąd. Żadne z moich API nie potrzebuje więcej niż 2 sekund na zwrócenie danych. To dlaczego pokazuje opóźnienie 15.151 sekund.
Używam stosu LAMP na zapleczu. Każda pomoc będzie doceniona.
Czy widzisz żądanie przekroczenia limitu czasu na serwerze? Ile czasu zajmuje serwer, aby go przetworzyć? –
Czy trafiasz dokładnie tym samym adresem URL za każdym razem? Wydaje mi się mało prawdopodobne, że jest to problem z Twoją aplikacją. Najprawdopodobniej masz scenariusz, w którym interfejs API działa wolno. –
Czy próbowałeś wysłać tę prośbę do klienta REST? Czy to jest limit czasu? – quant24