如何在Sinatra的一条路线上同时运行两个功能?

时间:2014-11-09 20:06:57

标签: ruby multithreading heroku concurrency sinatra

我正在尝试用Sinatra应用程序理解Ruby并发性 这是:

require 'sinatra'

get '/a' do
    sleep 10
    "result_a"
end

get '/b' do
    "result_b"
end

如果我将其作为ruby app.rbshotgun app.rb运行,然后转到 / a ,然后 / b - / b / a 执行并加载后,将不会加载 当我将此应用程序部署到Heroku时,然后转到 / a 然后 / b ,立即加载 / b
据我了解,Heroku进程是并发(或多线程?)而不是我的本地进程。

我的问题是:如何在本地服务器上同时运行我的应用程序? 是否可以从一条路线同时运行两个功能?

1 个答案:

答案 0 :(得分:1)

安装Unicorn。

gem install unicorn

official docs并不是很好,但您可以找到大量教程,向您展示如何配置和启动并行服务器进程,以便您同时提供多个请求。

它通过分叉您的进程来工作,这意味着它完全是线程安全的,但也意味着并发请求不会彼此共享内存状态。实际上,他们根本不会共享内存,因此如果您的应用程序具有真正庞大的内存占用(例如某种内存数据库),您将需要一个不同的解决方案。否则,Unicorn是一个非常流行和可靠的Ruby Web应用程序并发工具;它实际上可能是允许Heroku展示您所看到的并发性的原因。

相关问题