Rails: Passenger不能同时处理多个请求

4

我了解到Passenger是一个多进程服务器,这意味着它可以同时处理多个请求。

我正在本地独立模式下运行Passenger,并编写了代码来检查Passenger是否能够同时运行多个请求。我的代码如下:

class Test < ApplicationController

 def index
   sleep 10
 end 
end

我同时发出了两个HTTP请求,期望在10秒后得到两个请求的输出结果,但一个请求需要10秒后才返回结果,另一个请求需要20秒后才返回结果。这证明它只处理了一个请求,而不是同时处理两个请求。

这是否意味着Passenger是单进程服务器而不是多进程服务器?还是我漏掉了什么。


你可以学习 nginx + passenger。我认为默认情况下它假设只有一个进程,你需要配置它以实现多进程。 - Minato
2个回答

1

try like

 def index
    n = params[:n].to_i
    sleep n
    render :text => "I should have taken #{n} seconds!"
  end

1
乘客(以及大多数其他应用服务器)每个线程最多运行一个请求。通常每个进程也只有一个线程。来自Phusion Passenger文档的说明:
Phusion Passenger支持两种并发模型:
进程:单线程,多进程I/O并发。每个应用程序进程只有一个线程,一次只能处理1个请求。这是Ruby应用程序传统使用的并发模型。它具有良好的兼容性(可以与不设计为线程安全的应用程序一起使用),但对于需要等待大量外部I/O(例如HTTP API调用)的工作负载不适用,并且因为每个进程具有较大的内存开销而使用更多内存。
线程:多线程,多进程I/O并发。每个应用程序进程都有多个线程(可通过PassengerThreadCount进行自定义)。此模型提供了更好的I/O并发性,并且使用更少的内存,因为线程在同一进程中彼此共享内存。但是,如果应用程序未设计为线程安全,则使用此模型可能会导致兼容性问题。
(强调属于本人)

这里关于聚类呢?使用聚类,一个乘客可以处理多个请求。 - red-devil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接