繁体   English   中英

Rails - 非阻塞HTTP请求?

[英]Rails - Non blocking HTTP requests?

我想显示一些通过Ajax加载的亚马逊产品。

我用Ajax调用下面的方法,但请求需要几秒钟。

@items = []
@shows.shuffle.first(5).each do |show|
    req = AmazonProduct["us"]
    req.configure do |c|
      c.key = "###"
      c.secret = "###"
      c.tag = "###"
    end
    req << { :operation => 'ItemSearch',
             :search_index => params[:product_type],
             :response_group => %w{ItemAttributes Images},
             :keywords => show.name,
             :sort => "" }
    resp = req.get
    @items << resp.find('Item').shuffle.first
end

我已经注意到这个Action阻止了服务器。 我已尝试在另一个标签页中打开该网站。 在具有Ajax调用的第一个选项卡完成之前,该选项卡不会开始加载。

我怎样才能解决这个问题?


建立:

Ubuntu 10.10
Rails 3.1.1
Ruby 1.9.2
宝石: https//github.com/hakanensari/amazon_product

我怀疑这个块是因为你在开发模式下进行测试,使用默认的Rails服务器Webrick。

我的理解是webrick一次只能处理一个请求(这就是为什么不建议生产使用)。

生产级别的Rails服务器,如Phusion Passenger,或者一组mongrel / thin服务器,将为您提供并发性:)

编辑:

只是为了澄清,它取决于您在开发环境中使用的服务器,它不是轨道。

WebRick(开发中的默认http服务器)当时只能处理一个请求。 部署应用程序时,应使用puma,unicorn,Phusion Passenger或任何其他具有多个进程(或线程)处理请求的服务器。

老答案:

我不认为这在轨道上是可行的。

我如何解决这个问题的方法是创建一个简单的sinatra-synchrony应用程序,该应用程序只能从亚马逊中获取您想要的产品。

为了能够向此应用发送ajax请求,您需要将此应用指向您的域(子域)。

目前我没有看到任何其他解决方案。 当然,您的服务器上可以有多个应用程序进程,但这不能长期解决您的问题。

所以结束:

AJAX -> amazon-producs-sinatra-app.yourdomain.com 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM