CakePHP无法同时处理两个Ajax请求?

3
这是我第三次编辑这篇文章,经过更多的测试和调试,我发现了新的问题。这是我的情况:
我有一个方法"thinker"需要花费一些时间进行处理。因此,我决定通过Ajax调用它,并向用户显示指示器。到这一步为止——效果很好。
另一件我正在尝试做的事情,就是实际上向用户显示"思考"的进度,以百分比或者只是刻度的形式。
这并不难做,因为"thinker"有一个循环,在每个迭代中,它将新的"thoughts"保存到数据库中。
所以基本上——"counter"只显示"thoughts"的数量(与特定id相关联)。
问题在于回调选项没有被调用。
好吧——划掉那个——它确实被调用了,但只有两次。在请求之前(显示为零)和在"thinker"完成思考时,当它不再有用时(显示完整数量)。
以下是简化的代码:
<span id="indicator" style="display: none;"><img src="/img/ajax-loader.gif" alt="" /></span>
<span id="progress"></span>
<span id="clicker" style="cursor: pointer;">Do it!</span>

<script type="text/javascript">
//<![CDATA[
Event.observe('clicker', 'click', function(event) {
  new Ajax.Request(
    '/examples/thinker/123', 
    {asynchronous:true, evalScripts:true, onComplete:function(request, json) {Element.hide('indicator');}, onLoading:function(request) {Element.show('indicator');}}
    );
  new Ajax.PeriodicalUpdater(
    'progress', 
    '/examples/counter/123', 
    {asynchronous:true, evalScripts:true, frequency: 2}
    );
  });
//]]>
</script>

编辑:

通过使用Firebug XHR控制台,我成功地深入了解了这个问题。我试了试jQuery(只是为了测试,但它没有帮助)。

问题应该与CakePHP有关。我的意思是,当我使用基本的PHP创建了一个相同的场景时,它同时工作。当我使用Cake做时,counter将被调用,然后thinker将被调用,而counter将在每两秒钟后被调用,但只会在thinker思考结束后才会响应。

可能Cake无法在第一个请求完成之前处理第二个请求吗?

问候, Paul

2个回答

2

事实证明,问题确实出在CakePHP上。默认情况下,CakePHP将会话存储在文件中(实际上是php.ini的默认设置)。这意味着:

一个用户不能同时运行两个使用默认会话存储选项的CakePHP实例。

解决方法是更改:

Configure::write('Session.save', 'php');

to

Configure::write('Session.save', 'cache');

看起来这样做就可以了。


0

我不认为蛋糕有问题。可能是您的服务器,但这不太可能。然而,您的脚本可能会锁定数据库,导致无法再次读取。我认为这更有可能发生。我不是专家,只是猜测,但我会尝试使用持久连接,并在每个循环之间强制关闭/打开连接。还有一个要检查事务的事情,但我从未遇到过这种麻烦。

无论如何,我建议逐个排除每个组件以进行调查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接