我有非常简单的Sinatra应用程序来测试多线程(或多处理 - 我只想在3秒内得到响应,无论在服务器上处理了多少其他查询)。
require 'sinatra/base'
class MyApp < Sinatra::Base
set :threaded, true
get '/freeze' do
Thread.new {
sleep 3
}.join
'Its finished'
end
run! if app_file == $0
end
从这个话题我发现,自1.3以来Sinatra实际上是多线程的(我已经得到了1.4.5)。 Is Sinatra multi threaded?
我尝试使用瘦身和独角兽,通过thin --threaded
和ruby my_app.rb
。没有区别,第二个请求需要6秒才能处理。我试图将宝石切换为async_sinatra
或sinatra-synchrony
,但一切都毫无意义。
我做错了什么?
答案 0 :(得分:1)
阻止行为的最可能原因是您正在测试Web浏览器中的两个不同选项卡,这阻止了第二个调用,直到第一个调用完成。例如,您可以轻松地在Firefox的网络监视器中看到这种情况。请尝试从命令行:
curl http://localhost:3000/freeze &