Чтобы использование Eventmachine асинхронно выполнило Запрос HTTP, или при помощи их-запроса-HTTP или при помощи некоторых других средств, действительно ли возможно получить информацию об ошибке в errback обратном вызове? Как ошибка соединения по сравнению с тайм-аутом по сравнению с недопустимым ответом?
Давно не спрашивали об этом, но сегодня я обнаружил, что пытаюсь сделать то же самое. В объекте 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, который различает типы ошибок.