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() –