我的应用程序有一个问题,当服务器上的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