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

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;
holdtom
浏览 417回答 6
6回答

LEATH

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

慕仙森

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

人到中年有点甜

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

杨魅力

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

哈士奇WWW

AJAX本身不存在阻塞,但是在PHP默认的配置下,PHP本身会发生阻塞,因为默认的话PHP是单线程的。所以AJAX2和3要等1执行完才可以。
打开App,查看更多内容
随时随地看视频慕课网APP