首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rubinius + Puma不并发处理请求

Rubinius + Puma不并发处理请求
EN

Stack Overflow用户
提问于 2013-08-17 09:19:23
回答 2查看 528关注 0票数 1

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

代码语言:javascript
复制
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 

我在Rubinius2.0.0-Rc1上设置了puma (2.5.1) web服务器,配置如下:

代码语言:javascript
复制
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个和随后的请求将等待未使用的线程。但是,请求似乎是必然运行的。第二请求的处理仅在第一请求完成后才开始。为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-17 22:57:03

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

在服务器上打开不同urls的多个浏览器窗口将按预期的方式并发处理请求(您可以使用Sinatra splat param轻松地测试这个过程,比如get '/*/ do ...)。

使用curl一次发送多个请求,甚至所有请求都发送到相同的url,也如预期的那样工作。

票数 3
EN

Stack Overflow用户

发布于 2013-08-17 14:47:24

很可能,按照Sinatra的自动配置方法,Sinatra需要使用ruby app.rb运行,而不是使用rackup或服务器特定的命令来启动应用程序。或者,您需要深入了解Sinatra配置,而不仅仅是Puma

参见康斯坦丁回答的最后一行:Is Sinatra multi threaded?

..。否则,这就是我所见过的Puma的一个问题,它导致我迁移到Reel,然后完全离开RackSinatra

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18287167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档