【发布时间】:2016-06-08 15:22:33
【问题描述】:
我现在使用 Phalcon 作为框架来构建我的服务器,并且我正在尝试在函数中实现循环。
例如,用户从页面提供输入,页面使用 ajax 将输入发布到我服务器的 url,然后我服务器上的 url 正在做一些可能持续 3 秒的循环工作。
此外,该页面将使用另一个 ajax 将 GET 发送到我服务器的另一个 url,以获取循环的进度。我在会话中存储了进度。
但是,似乎当服务器在循环时,它无法响应其他请求。根据我的观察,我可以看到第二个 ajax 被发送了多次,但是我得到的日志只表明第二个 url 的函数只被调用了一次。
这就是Phalcon的局限吗? php?阿帕奇?还是我在配置方面做错了什么?
这里显示了一些演示代码:
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()
标签: php jquery ajax apache phalcon