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

Ruby 如何在Sinatra从一条路线同时运行两个功能?,ruby,multithreading,heroku,concurrency,sinatra,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.rb或shotgun app.rb运行它,然后转到/a,然后/b-/b将不会加载,直到/a执行并加载自身。 但是,当我将此应用部署到Heroku,并转到/a然后/b,就会立即加载/b。 据我所知,Heroku进程是并发

我正在尝试了解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进程是并发的(或多线程的?),而不是我的本地进程

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

安装Unicorn

gem install unicorn
这些不是很好,但您可以找到大量教程,向您展示如何配置和启动并行服务器进程,从而允许您同时为多个请求提供服务


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

Ah。不需要。听起来您可能需要使用Ruby的
线程
功能。你正在研究的是一个相当棘手的问题,但并非不可能。Unicorn允许我从一条路线同时运行多个功能?[明白了,Ruby的
线程
,谢谢]Unicorn将允许您同时从同一路径运行两段独立的代码,或者同时运行两段相同的代码。这取决于你的路线设置要做什么。但是,Unicorn不允许您从两个单独请求的上下文中对内存中的同一对象进行操作。嗯,听起来不错-我已经有了WebSocket,可以在保持浏览器会话的同时与view交互,现在我只需要同时打开我的Watir页面。我想那可能行得通。