0

我需要在后台运行一个非常长的过程。该程序应该将请求详细信息发送到服务器,服务器返回一个进程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');.

如何强制关闭连接,以便客户端可以继续做其他事情?

4

0 回答 0