如何在Heroku中执行并行HTTP请求?

aca*_*vid 8 ruby-on-rails heroku

我正在构建一个Ruby on Rails应用程序,可以访问大约6-7个API,根据用户的输入从中获取信息,比较并向用户显示结果(信息不保存在数据库中).我将使用Heroku来部署应用程序.我希望那些HTTP请求能够并行完成访问API,因此答案时间更好,而不是顺序完成.您认为在Heroku中实现这一目标的最佳方法是什么?

非常感谢您的任何建议!

max*_*uin 6

如果你想在服务器端实际执行请求(tfe的javascript解决方案是一个好主意),你最好的选择是使用EventMachine.使用EventMachine提供了一种执行非阻塞IO的简单方法.

另请查看EM-Synchrony以获取一组Ruby 1.9光纤感知客户端(包括HTTP).

您需要为非阻塞HTTP请求执行的操作如下:

require "em-synchrony"
require "em-synchrony/em-http"
EM.synchrony do
    concurrency = 2
    urls = ['http://url.1.com', 'http://url2.com']

    # iterator will execute async blocks until completion, .each, .inject also work!
    results = EM::Synchrony::Iterator.new(urls, concurrency).map do |url, iter|

        # fire async requests, on completion advance the iterator
        http = EventMachine::HttpRequest.new(url).aget
        http.callback { iter.return(http) }
        http.errback { iter.return(http) }
    end

    p results # all completed requests
    EventMachine.stop
end
Run Code Online (Sandbox Code Playgroud)

祝好运!