cakephp彗星usleep阻止一切

Dip*_*mar 5 php mysql cakephp comet

下面是我最终使用成功的彗星实现的代码.

$lastmodif = isset($this->params['form']['timestamp']) ? $this->params['form']['timestamp'] : 0;
$currentmodif = $already_updated[0]['Update']['lastmodified'];

while ($currentmodif <= $lastmodif)
{
    usleep(5000000);
    clearstatcache();
    $already_updated_new = $this->Update->find('all',array
    (
        'conditions' => array
        ( 
            'Update.receiver_id' =>  $this->Auth->user('id'),
            'Update.table_name' =>  "request_responses"
        )
    ));
    $currentmodif = $already_updated_new[0]['Update']['lastmodified'];
}
Run Code Online (Sandbox Code Playgroud)

$already_updated[0]['Update']['lastmodified'] 获取表的最后更新时间戳的查询结果.

在上面的代码中,$ lastmodif和$ currentmodif是每次成功的彗星响应后传递的时间戳.

但现在的问题是,当我点击同一页面上的其他链接时,没有任何反应,但在等待这么长时间后重定向.

我认为usleep阻止了其他HTTP请求.

我正在使用mysql和cakephp请大家指导我该怎么办才能解决这个问题.

我已经尝试在调用页面时刷新,但它显示无法修改标头错误,因为已经发送了输出.

谢谢.

Swa*_*yok 5

我几次遇到过类似的情况.看起来Session被您的睡眠脚本阻止了.

如何在CakePHP中解决它:在脚本的开头
调用session_write_close();.
没有办法通过Cake的Session Component或Helper来做到这一点
注意:如果脚本中的某些内容使用session - Cake将重新打开会话并挂起所有再次使用相同会话的请求.在这种情况下,您需要在睡眠前或任何需要花费大量时间才能完成的操作之前关闭会话