Wenn Sie Eventmaschine verwenden, um eine HTTP-Anfrage asynchron auszuführen, entweder mit em-http-request oder auf andere Weise, ist es möglich, Informationen über den Fehler im Fehlerbackback zu erhalten? Wie Verbindungsfehler vs. Timeout vs. ungültige Antwort?Informationen über Fehler bei der Verwendung von EventMachine Http Request
5
A
Antwort
6
Es ist eine Weile her, seit dieser eine gefragt wurde, aber ich habe versucht, das gleiche heute zu tun. Es gibt einen Fehlergetter für das HttpClient-Objekt. Hier ist mein allgemeiner Ansatz, einen Faser Pool mit:
fiber = Fiber.current
@request = EventMachine::HttpRequest.new(url)
@http = @request.get(opts)
@http.errback do
fiber.resume Exception.new("An error occurred in the HTTP request: #{@http.errors}", self)
end
@http.callback do
fiber.resume true
end
result = fiber.yield
raise result if result.kind_of?(Exception)
Eine Sache, ich habe nicht herausgefunden, wie zu tun ist, Timeout-Fehler erkennen, wenn Sie aber solche von etwas unterscheiden wollen. Der einfachste Ansatz wäre, die Anfrage zu terminieren und festzustellen, ob sie länger als das angegebene Zeitlimit ist, aber ich habe nichts in em-http-request gefunden, das die Fehlertypen unterscheidet.
Es ist eigentlich "http.error"; Leider ist es oft leer. –