2010-01-09 1 views

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.

+1

Es ist eigentlich "http.error"; Leider ist es oft leer. –