我正在尝试用Sinatra应用程序理解Ruby并发性 这是:
require 'sinatra'
get '/a' do
sleep 10
"result_a"
end
get '/b' do
"result_b"
end
如果我将其作为ruby app.rb
或shotgun app.rb
运行,然后转到 / a ,然后 / b - / b / a 执行并加载后,将不会加载
当我将此应用程序部署到Heroku时,然后转到 / a 然后 / b ,立即加载 / b 。
据我了解,Heroku进程是并发(或多线程?)而不是我的本地进程。
我的问题是:如何在本地服务器上同时运行我的应用程序? 是否可以从一条路线同时运行两个功能?
答案 0 :(得分:1)
安装Unicorn。
gem install unicorn
official docs并不是很好,但您可以找到大量教程,向您展示如何配置和启动并行服务器进程,以便您同时提供多个请求。
它通过分叉您的进程来工作,这意味着它完全是线程安全的,但也意味着并发请求不会彼此共享内存状态。实际上,他们根本不会共享内存,因此如果您的应用程序具有真正庞大的内存占用(例如某种内存数据库),您将需要一个不同的解决方案。否则,Unicorn是一个非常流行和可靠的Ruby Web应用程序并发工具;它实际上可能是允许Heroku展示您所看到的并发性的原因。