我需要在后台运行一个非常长的过程。该程序应该将请求详细信息发送到服务器,服务器返回一个进程ID。程序应该在某个时间间隔发送一个带有该 ID 的检查请求,以查看该过程是否完成。一切正常,除了我无法关闭连接并且客户端在进程完成之前无法接收 ID。我尝试使用这篇文章:http ://codehackit.blogspot.com/2011/07/how-to-kill-http-connection-and.html但它仍然没有关闭连接。这是我到目前为止所做的:
$id = time();
$this->Session->write(sprintf('LongProcess.%s.finished', $id), false);
$this->Response->data(array('process_id' => $id));
ob_end_clean();
ob_start();
$this->Response->render();
header("Connection: close");
ob_end_flush();
ob_flush();
flush();
ignore_user_abort(true);
set_time_limit(0);
// Do really long processing here
为了帮助解释,$this->Response
是我编写的用于处理 ajax 调用的组件。该data()
方法将数据添加到组件中的数组中。该render()
方法将所有数据格式化为客户端使用的特定规范,并使用$this->controller->render('/Elements/response');
.
如何强制关闭连接,以便客户端可以继续做其他事情?