【问题标题】:Asynchronous HTTP requests with ruby使用 ruby​​ 的异步 HTTP 请求
【发布时间】:2012-03-09 19:10:46
【问题描述】:

我有一个满是请求的 rabbitmq 队列,我想将请求作为 HTTP GET 异步发送,而不需要等待每个请求响应。现在我很困惑什么更好用,线程或只是 EM ?我目前使用它的方式如下所示,但很高兴知道这里是否有更好的性能更好的实现,因为它是程序的一个非常关键的部分:

AMQP.start(:host => "localhost") do |connection|
  queue = MQ.queue("some_queue")
  queue.subscribe do |body|
    EventMachine::HttpRequest.new('http://localhost:9292/faye').post :body => {:message =>  body.to_json }
  end
end

使用上面的代码,系统会等待每个请求完成后再开始下一个请求吗?如果这里有任何提示,我将不胜感激

【问题讨论】:

    标签: ruby http asynchronous eventmachine


    【解决方案1】:

    HTTP 是同步的,因此您必须等待回复。如果你想模拟一个异步环境,你可以有一个线程池并将每个请求传递给一个等待回复的线程,然后回到池中直到下一个请求。您可以向线程发送一个回调函数以在回复完成时使用,或者您将立即返回一个未来的回复对象,这样您就可以推迟等待回复,直到您真正需要回复数据。

    另一种方法是拥有一个进程池,每个进程都在处理请求、等待回复等。

    在这两种情况下,您都必须有一个足够大的池,否则您最终仍会等待一段时间。

    【讨论】:

    • 任何关于如何在我的代码中应用它的例子都将受到高度赞赏,我从理论上得到了它,但我很想看看我该如何应用它,比如有没有任何链接可以表明这一点,以及什么我应该使用线程吗?产卵?提前致谢
    • 我认为答案是使用像 Typhoeus 这样使用 libcurl 的东西,反正我没能用上面的代码应用它
    • @Eqbal 你有想过这个吗?
    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    相关资源
    最近更新 更多