我现在使用 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()。否则整个服务器将在会话上被锁定。