更新:
如果您有同样的问题,请先阅读“Indicate to an ajax process that the delayed job has completed”。谢谢 Gene .
我有并发问题。我有一个 Controller 抓取几个网站,但每次调用我的 Controller 都需要大约 4-5 秒来响应。
因此,如果我连续调用 2 次(或更多)次,则第二次调用需要在开始之前等待第一次调用。
那么如何在我的 Controller 中解决这个问题呢?也许像 EventMachine 这样的东西?
更新 & 示例 :
application_controller.rb
def func1
i=0
while i<=2
puts "func1 at: #{Time.now}"
sleep(2)
i=i+1
end
end
def func2
j=0
while j<=2
puts "func2 at: #{Time.now}"
sleep(1)
j=j+1
end
end
whatever_controller.rb
puts ">>>>>>>> Started At #{Time.now}"
func1()
func2()
puts "End at #{Time.now}"
所以现在我需要请求 http://myawesome.app/whatever从同一用户/浏览器/等同时多次。
我用 Unicorn 尝试了 Heroku(和本地),但没有成功,这是我的设置:
要求:
更多信息:
我现在有 2 个云服务器正在运行。
最佳答案
您可能在开发模式下使用 webrick。 Webrick 一次只处理一个请求。
您有几种解决方案,存在许多可以处理并发的 ruby Web 服务器。
这里有几个。
薄的
Thin 最初基于 mongrel,使用 eventmachine 来处理多个并发连接。
unicorn
Unicorn 使用一个主进程将请求分派(dispatch)给网络 worker ,4 个 worker 等于 4 个并发可能的请求。
彪马
Puma 是一个相对较新的 ruby 服务器,它的亮点是它在线程中处理并发请求,确保你的代码是线程安全的!
乘客
passenger 是一个捆绑在 nginx 或 apache 中的 ruby 服务器,非常适合生产和开发
其他
这些是一些替代品,还有很多其他的,但我认为它们是当今最常用的。
要使用所有这些服务器,请查看它们的说明。它们通常可以在他们的 github README 上找到。
关于ruby-on-rails - 回滚 : multiple calls in a row to the same long-time-response controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21864536/