php文件阻塞
2018/12/11    标签: php阻塞    php均衡负载    phpsleep   

出现情况:

1.php如下

<?php
sleep (50);
echo 'hello';

2.php如下

<?php
echo 'hello';

当先打开1.php再打开2.php时,2.php会等到1.php执行完后才输出。

网上查到的说有session锁,试了下session_write_close(),并没有效果。


解决思路,使用upstream 搭建负载均衡服务器,当前php-cgi阻塞的时候,可以执行另一个php-cgi程序;


物料:RunHiddenConsole下载链接: https://pan.baidu.com/s/1sLnTKWk0BwRbJC-nNi8jNQ 提取码: akdi
(解压后RunHiddenConsole.exe,放在C:\Windows\System32文件夹中,方便使用)

phpstudy下载:http://phpstudy.php.cn/

实现步骤:

1.打开nginx.conf,在http模块配置下,添加upstream模块,代码如下

   upstream phpfastcgi_proxy {
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
    server 127.0.0.1:9002;
    server 127.0.0.1:9004;
    server 127.0.0.1:9005;
    server 127.0.0.1:9006;
    server 127.0.0.1:9007;
    }

2.把nginx.conf和vhost.conf中所有虚拟主机的

fastcgi_pass 127.0.0.1:9000

替换为

fastcgi_pass phpfastcgi_proxy;

3.启动phpstudy,运行需要的Nginx版本组合,右键停止,只停止nginx

image.png


4.在phpstudy中找到对应php版本php-cgi.exe所在目录,在该目录下创建php-cgi.bat,输入如下内容后双击运行。

php-cgi.bat文件内容:

@echo off
REM Windows 下无效
REM set PHP_FCGI_CHILDREN=9

REM 每个进程处理的最大请求数,或设置为 Windows 环境变量
set PHP_FCGI_MAX_REQUESTS=1000

echo Starting PHP FastCGI...
RunHiddenConsole php-cgi -b 127.0.0.1:9000 -c php.ini
echo Starting PHP FastCGI...
RunHiddenConsole php-cgi -b 127.0.0.1:9001 -c php.ini
echo Starting PHP FastCGI...
RunHiddenConsole php-cgi -b 127.0.0.1:9002 -c php.ini
echo Starting PHP FastCGI...
RunHiddenConsole php-cgi -b 127.0.0.1:9003 -c php.ini

echo Starting PHP FastCGI...
RunHiddenConsole php-cgi -b 127.0.0.1:9004 -c php.ini

echo Starting PHP FastCGI...
RunHiddenConsole php-cgi -b 127.0.0.1:9005 -c php.ini

echo Starting PHP FastCGI...
RunHiddenConsole php-cgi -b 127.0.0.1:9006 -c php.ini

echo Starting PHP FastCGI...
RunHiddenConsole php-cgi -b 127.0.0.1:9007 -c php.ini


5.在phpstudy中找到对应php版本php-cgi.exe所在目录,在该目录下创建nginxStart.bat,输入如下内容后双击运行。

nginxStart.bat文件内容:

RunHiddenConsole D:/phpStudy/nginx/nginx.exe -p D:/phpStudy/nginx/

注:D:/phpStudy/nginx/nginx.exe是nginx.exe的文件路径

D:/phpStudy/nginx/是nginx.exe所在文件夹路径

至此phpstudy的Nginx又处于运行状态。

可以测试,打开1.php处于阻塞状态时,打开2.php依旧可以执行。


注意:不能使用phpstudy的重启和启动,那样会重置vhost.conf且php-cgi模块全部关闭,只打开1个127.0.0.1:9000