如何在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 : //blog.heroku.com/archives/2009/7/15/background_jobs_with_dj_on_heroku/
您从Heroku购买的“工人”越多,可以同时处理的后台工作越多,您的“Dynos”就会为您的用户提供服务。