Apache PHP循环,会阻止对服务器的其他访问吗?


Apache PHP looping, will it block other accesses to the server?

我现在使用 Phalcon 作为框架来构建我的服务器,我正在尝试在函数中实现一个循环。

例如,用户从页面提供输入,页面使用 ajax 将输入发布到我的服务器的 url,然后我的服务器上的 url 正在执行一些循环工作,这可能持续 3 秒。

此外,该页面将使用另一个 ajax 将 GET 发送到我服务器的另一个 url,以便获取循环的进度。我将进度存储在会话中。

但是,当服务器执行循环时,它似乎无法响应其他请求。从我的观察来看,我可以看到第二个 ajax 被多次发送,但我得到的日志只指示第二个 url 的功能只被调用一次。

这是法尔康的局限性吗?.PHP?阿帕奇?还是我在配置方面做错了什么?

下面显示了一些演示代码:

爪哇语

function query(point)
{
    $.ajax(
    {
        url: "/work", 
        type: 'POST',
        dataType: 'json',
        data: {...},
        success: function(data, status)
        {
            alert(data);
            if(progressInterval)
            {
                clearInterval(progressInterval);
                alert("FINISHED");
            }
        },
        error: function(err)
        {
            if(progressInterval)
            {
                clearInterval(progressInterval);
                ertal("ERR");
            }
        }
    });
    progressInterval = setInterval(function()
    {
        alert("Send");
        $.ajax(
        {
            url: "/loadProgress",
            type: 'GET',
            dataType: 'text',
            success: function(data)
            {
                alert(data);
            }
        });
    }, 100);
};

工作.php

function work()
{
    for($i=0;$i<3000;$i++)
    {
        do some work;
        store $i in session;
    }
    echo "finished";
}

加载进度.php

function loadProgress()
{
    get $i from session;
    echo $i/3000;
}

我在这里找到了我错过的东西。编写会话后,我们必须调用 session_write_close()。否则整个服务器将在会话上被锁定。