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

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

非常感谢您的任何建议!

如果你想在服务器端实际执行请求(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 

祝好运!

您总是可以使用Javascript在客户端进行请求。 那么你不仅可以并行运行它们,而且甚至不需要往返自己的服务器。

我没有尝试并行化这样的请求。 但是我在heroku上尝试过并行,就像一个魅力! 这是我关于它的简单博文。

http://olemortenamundsen.wordpress.com/2010/10/17/spawning-multiple-threads-at-heroku-using-parallel/

看看将每个请求创建为后台作业: http : //blog.heroku.com/archives/2009/7/15/background_jobs_with_dj_on_heroku/

您从Heroku购买的“工人”越多,可以同时处理的后台工作越多,您的“Dynos”就会为您的用户提供服务。