Code=-1001 "Die Zeitüberschreitung der Anforderung."

Arbeite ich an einem Swift-Projekt, das erfordert eine Menge des Verbrauchs von APIs. Alles ist in Ordnung, aber manchmal (1 in 20), bekomme ich Code=-1001 "The request timed out." Fehler beim Aufruf der API.

Ich bin mit Alamofire. Ich füge den code zum Aufruf der 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)
       }
}

Und die log ist

[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 }

Ich weiß, ich kann erhöhen Sie den timeout-Zeitraum um den Fehler zu vermeiden. Aber ich möchte wissen, der eigentliche Grund, warum es wirft den Fehler. Keiner meiner API-dauert mehr als 2 Sekunden, um die Daten zurück. Dann, warum es zeigt Latenz von 15.151 Sekunden.

Ich bin mit LAMP-stack auf backend. Jede Hilfe würde geschätzt werden.

  • Sehen Sie die Anforderung, dass die mal den Empfang auf deinem server? Wie lange ist der server unter, um es zu verarbeiten?
  • Sind Sie schlagen die exakt gleiche URL, jedes mal? Es scheint unwahrscheinlich zu mir, dass ist ein problem mit Ihrer Anwendung. Wahrscheinlicher ist, dass Sie wirklich tun, haben Sie ein Szenario, in dem Sie Ihre API langsam ist.
  • Haben Sie versucht, diesen Wunsch auf eine REST-client? Es tut timeout?
  • das ist das Problem. Es wirft diese Fehlermeldung nur während ich schlug es über iOS-Gerät. Auch auf Android, alles ist in Ordnung.
  • ich auf die exakte url jedes mal zu überprüfen, wenn der Fehler behoben ist. Aber das Problem ist nicht eine API-spezifisch. Der Fehler wird angezeigt in der app auf ein API auf iOS-Gerät.
  • Auch ich hatte das gleiche Problem. Das problem ist die API-Treffer erreicht nie das backend, vielleicht, wenn der Netzwerk-switch passiert, oder die app geht in den hintergrund, bevor diese Anforderung ausgelöst wird, von iOS, in diesem Fall.

InformationsquelleAutor rahul garg | 2016-08-22
Schreibe einen Kommentar