Получить информацию об ошибке при использовании Eventmachine Http Request - PullRequest
5 голосов
/ 09 января 2010

При использовании Eventmachine для асинхронного выполнения HTTP-запроса, либо с помощью em-http-request , либо другими способами, возможно ли получить информацию об ошибке в обратном вызове errback? Как ошибка соединения, время ожидания или неверный ответ?

1 Ответ

6 голосов
/ 30 июня 2010

Прошло много времени с тех пор, как об этом спросили, но я обнаружил, что пытаюсь сделать то же самое сегодня. В объекте HttpClient есть средство получения ошибок. Вот мой общий подход, использующий пул волокон:

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)

Одна вещь, которую я не понял, как это сделать, это обнаружить ошибки тайм-аута, если вы хотите отличить их от всего остального. Простейшим подходом было бы рассчитать время запроса и определить, превышает ли он указанное время ожидания, но я не нашел в em-http-request ничего, что отличало бы типы ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...