我的應用程序有一個問題,當服務器上的ajax調用花費太多時間時:它排隊所有其他用戶的查詢,直到完成服務器端(我意識到取消呼叫客戶端不起作用,用戶仍然需要等待)。Symfony:ajax調用導致服務器排隊的下一個查詢
這裏是我的測試案例:
<script type="text/javascript" src="jquery-1.4.1.min.js"></script>
<a href="another-page.php">Go to another page on the same server</a>
<script type="text/javascript">
url = 'http://localserver/some-very-long-complex-query';
$.get(url);
</script>
所以,當得到的是開除,然後後,我點擊鏈接,把我送到其他頁面之前服務於第一個呼叫服務器完成。我的問題是我想避免這種行爲。
我在一個LAMP服務器上,我正在尋找一種方式來通知服務器,用戶中止了查詢函數,如connection_aborted(),你認爲這是該走的路嗎?另外,我知道這個PHP腳本的最長部分是MySQL查詢,所以即使我知道connection_aborted()可以檢測到用戶取消了這個調用,但我仍然需要在MySQL查詢過程中檢查這個問題...我'米並不確定PHP可以處理這種「事件」。
所以,如果你有什麼更好的想法,我等不及聽到它。
謝謝。
更新: 經過進一步調查,我發現這個問題只發生與Symfony框架(我忽略了精確的,我的壞)。似乎Ajax調用會鎖定任何其他未來呼叫。它可能與控制器或路由系統有關,我正在研究它。
另外對於那些對這個問題感興趣的人來說,我的新測試用例是: -Symfony 1.4.3的新項目,默認配置,我剛創建了一個應用程序和一個默認模塊。 -jquery 1.4用於ajax查詢。
這是我的actions.class.php(在我的獨特模塊):
class defaultActions extends sfActions
{
public function executeIndex(sfWebRequest $request)
{
//Do nothing
}
public function executeNewpage()
{
//Do also nothing
}
public function executeWaitingaction(){
// Wait
sleep(30);
return false;
}
}
這是我indexSuccess.php的模板文件:
<script type="text/javascript" src="jquery-1.4.1.min.js"></script>
<a href="<?php echo url_for('default/newpage');?>">Go to another symfony action</a>
<script type="text/javascript">
url = '<?php echo url_for('default/waitingaction');?>';
$.get(url);
</script>
對於新的頁面模板,它不是非常相關...但有了這個,我能夠重現我在真實應用程序中遇到的鎖定問題。
是否有其他人有同樣的問題?
謝謝。
是的,其實我注意到getUser() - > shutdown()還不足以關閉會話,我不得不在之後添加session_write_close()。你可以試試這個,但是確保你不需要在會話中訪問任何東西。 – Remiz 2010-03-19 18:32:04