2010-01-09 6 views

Odpowiedz

6

Minęło trochę czasu, odkąd ten ktoś został zapytany, ale teraz próbowałem zrobić to samo. W obiekcie HttpClient występuje błąd pobierający. Oto moje ogólne podejście, wykorzystując pulę włókien:

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) 

Jedno nie zorientowali się, jak to zrobić jest wykryć błędy limitu czasu, jeśli chcesz, aby odróżnić te z niczym innym. Najprostszym podejściem byłoby zrobienie żądania i ustalenie, czy jest ono dłuższe niż określony limit czasu, ale nie znalazłem niczego w żądaniu em-http, które odróżnia typy błędów.

+1

To w rzeczywistości 'http.error'; Niestety, często jest puste. –