为了账号安全,请及时绑定邮箱和手机立即绑定

PHP阻塞问题 高手请进!!!

PHP阻塞问题 高手请进!!!

PHP
holdtom 2019-03-16 06:18:11
a.html有三个ajax方法(ajax1,ajax2,ajax3),先后访问a.php,如果ajax1访问a.php程序sleep(15)。请问这样会不会阻塞ajax2,ajax3的访问呢,原因是什么? a.html代码如下: var a = 1; var b = 1; var c = 1; function ajax1(){ $.get('a.php?from=a', function(){ $('#ajax1').text(a); a++; ajax1(); }); } function ajax2(){ $.get('a.php?from=b', function(){ $('#ajax2').text(b); b++; ajax2(); }); } function ajax3(){ $.get('a.php?from=c', function(){ $('#ajax3').text(c); c++; ajax3(); }); } function beginAjax(){ ajax1(); ajax2(); ajax3(); } a.php代码如下: <?php $from= $_GET['from']; if($from == 'a'){ sleep(15); } echo 1;
查看完整描述

6 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

你模拟不就知道了,js直接发三个ajax请求过去
顺序是ajax1,ajax2,ajax3
分别带参数sleepTime1=10,sleepTime2=5,sleepTime3=2,
然后你打开调试network,你看三个ajax哪个先response。

查看完整回答
反对 回复 2019-03-18
?
慕仙森

TA贡献1827条经验 获得超8个赞

不一定阻塞. 要看具体情况. 比如你使用 nginx+php-fpm的架构. 你每次的http请求 由NGINX转发到 php-fpm. php-fpm 同一时间是只能处理一个请求的. 如果你的PHP-FPM进程数大于2 就不会阻塞. 否则就会没有PHP-FPM进程处理请求而超时. 不过这个超时是网络请求层面的. 和程序阻塞概念不一样.

查看完整回答
反对 回复 2019-03-18
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

sleep是可以阻塞其他请求的访问的。关键在于你的请求是否是用的用一个 fast-cgi 进程。

查看完整回答
反对 回复 2019-03-18
?
杨魅力

TA贡献1811条经验 获得超6个赞

用的apache php mod,配置里只要apache进程的数量超过3,就不会阻塞。
用的nginx + php-fpm,fpm进程数量只要超过3,就不会阻塞。

查看完整回答
反对 回复 2019-03-18
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

AJAX本身不存在阻塞,但是在PHP默认的配置下,PHP本身会发生阻塞,因为默认的话PHP是单线程的。所以AJAX2和3要等1执行完才可以。

查看完整回答
反对 回复 2019-03-18
  • 6 回答
  • 0 关注
  • 416 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信