Windows PHP-FPM 可以同时处理多个请求吗?

Posted

技术标签:

【中文标题】Windows PHP-FPM 可以同时处理多个请求吗?【英文标题】:Can Windows PHP-FPM serve multiple simultaneous requests? 【发布时间】:2013-03-27 00:11:38 【问题描述】:

我目前正在使用 nginxPHP FastCGI,但这种安排受到一次只能处理一个 HTTP 请求的限制。 (请参阅here。)我从 Windows 命令提示符启动 php

c:\Program Files\PHP>php-cgi -b 127.0.0.1:9000

但是还有另一种运行 PHP 的方法,称为“快速 CGI 进程管理器”(PHP-FPM)。

nginx 后面的 Windows 7 上运行时,PHP-FPM 可以同时处理多个 HTTP 请求吗?

【问题讨论】:

【参考方案1】:

我最终得到了这个解决方案:你只需启动几个 php-cgi 进程并将它们绑定到不同的端口,你需要更新 nginx 配置:

http 

    upstream php_farm 
        server 127.0.0.1:9000 weight=1;
        server 127.0.0.1:9001 weight=1;
        server 127.0.0.1:9002 weight=1;
        server 127.0.0.1:9003 weight=1;
    

    ...

    server 
      ...
      fastcgi_pass   php_farm;
    



为了方便,我创建了简单的批处理文件。

start_sandbox.bat:

@ECHO OFF
ECHO Starting sandbox...

RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9000 -c php\php.ini
RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9001 -c php\php.ini
RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9002 -c php\php.ini
RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9003 -c php\php.ini

RunHiddenConsole.exe mysql\bin\mysqld --defaults-file=mysql\bin\my.ini --standalone --console

cd nginx && START /B nginx.exe && cd ..

stop_sandbox.bat:

pstools\pskill php-cgi

pstools\pskill mysqld

pstools\pskill nginx

如您所见,有 2 个依赖项:pstools 和 runhiddenconsole.exe

【讨论】:

谢谢。在过去的 2 个小时里一直在苦苦挣扎。【参考方案2】:

还有一个更好的方法。

在您的 nginx 配置中使用简单的 Fast-CGI 设置

nginx.conf

server 
     ....
     location ~ \.php$ 
            try_files   $uri =404; 
            include     fastcgi.conf;
            fastcgi_pass    127.0.0.1:9001;
            fastcgi_read_timeout 60;
            allow       127.0.0.1;
            allow       ::1;        
            deny        all;        
       
  

然后在你的 start.bat 文件中

set PATH=%cd%\bin\php;%PATH%
set PHP_FCGI_MAX_REQUESTS=0
set PHP_FCGI_CHILDREN=10
RunHiddenConsole.exe %cd%/php/php-cgi.exe -b 127.0.0.1:9001 -c %cd%/php/php.ini

PHP_FCGI_CHILDREN 变量是魔法发生的地方。 PHP_FCGI_MAX_REQUESTS 也很重要。

【讨论】:

时机不错。只是想在某处创建一个帖子,询问是否真的没有简单的方法可以在 Windows 上动态创建 PHP-FPM 子进程:)。 效果很好!!!只有一个 php-cgi 进程我快疯了。没想到这么容易。谢谢!!!

以上是关于Windows PHP-FPM 可以同时处理多个请求吗?的主要内容,如果未能解决你的问题,请参考以下文章

windows编程怎么同时播放两个或者多个声音文件?

php-fpm

nginx与php-fpm的运行方式?

Apache的PHP-FPM-启用实例

PHP+nginx+php-fpm探讨它们的运行机制和原理

pthread多线程是指同时运行多个程序吗?