2016-02-25 100 views
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; 
} 
+1

問題可能很廣泛。取決於你得到的確切設置。如果你的PHP只在單線程環境下運行,那麼對我來說它顯然不能同時響應多個請求。但這可能是一個完全不同的故事,php/apache在多個CPU內核上的多個線程中運行。 –

+0

這是有道理的。但我發現我錯過了session_write_close() –

回答

1

我發現了我在這裏錯過的東西。 寫完會話後,我們必須調用session_write_close()。 或整個服務器將被鎖定會話。

相關問題