gpt4 book ai didi

ruby - Rubinius + Puma 不会同时处理请求

转载 作者:太空宇宙 更新时间:2023-11-03 17:53:56 27 4
gpt4 key购买 nike

我有一个简单的基于 Sinatra 的应用程序,它将每个请求卡住 30 秒:

get '/test' do
puts "#{@@counter}, #{Thread.current.object_id}"
1.upto(30) {|i| sleep 1;puts "#{Thread.current.object_id}, #{i}"}
[200, "#{Thread.current.object_id}, #{@@counter += 1}"]
end

我使用以下 puma 配置在 rubinius 2.0.0-rc1 上设置了 puma (2.5.1) web 服务器:

pidfile "#{app_path}/pid_files/puma.pid"
state_path "#{app_path}/pid_files/puma.state"
environment 'production'
threads 3, 3
bind "tcp://x.x.x.x:9292"
daemonize true

我期望此配置能够同时处理 3 个请求,而第 4 个和后续请求将等待未使用的线程。但似乎请求是相应地运行的。只有在第一个请求完成后才开始处理第二个请求。为什么?

最佳答案

你如何测试这个?在我的测试中,启动多个浏览器窗口都指向相同的 url 导致按顺序处理请求,但这似乎是因为浏览器一次只发送一个请求(我是使用 Chrome,我没有检查任何其他的)。

让多个浏览器窗口在服务器上打开不同 url 会导致请求按预期同时处理(您可以使用 Sinatra splat 参数轻松测试它,使用像 get '/*/do ... 这样的路线。

使用 curl 一次发送多个请求,即使所有请求都发送到同一个 url,也能按预期工作。

关于ruby - Rubinius + Puma 不会同时处理请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18287167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com