1
我现在使用Phalcon作为构建我的服务器的框架,并且我试图在函数中实现循环。Apache PHP循环,它会阻止其他访问服务器?
例如,用户从页面提供输入,页面使用ajax将输入发布到我的服务器的url,然后我的服务器上的url正在做一些可能持续3秒的循环工作。
此外,该页面将使用另一个Ajax发送GET到我的服务器的另一个URL,以获得循环的进度。我将进度存储在会话中。
但是,似乎当服务器正在做循环时,它不能响应其他请求。从我所观察到的,我可以看到第二个Ajax被多次发送,但是我得到的日志仅指示第二个url的函数只被调用一次。
这是Phalcon的限制吗? PHP? Apache的?或者我在配置上做了什么错误?
一些演示代码如下所示:
的Javascript
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);
};
work.php
function work()
{
for($i=0;$i<3000;$i++)
{
do some work;
store $i in session;
}
echo "finished";
}
loadProgress.php
function loadProgress()
{
get $i from session;
echo $i/3000;
}
问题可能很广泛。取决于你得到的确切设置。如果你的PHP只在单线程环境下运行,那么对我来说它显然不能同时响应多个请求。但这可能是一个完全不同的故事,php/apache在多个CPU内核上的多个线程中运行。 –
这是有道理的。但我发现我错过了session_write_close() –