### 场景 PHP在完成某些业务的时候,通常会一起完成诸如通知等方面的功能,但这些功能可能会占用大量时间,如果功能完成后返回结果给客户端的话,会浪费大量时间。而这些功能的返回并不是客户端所关心的,那么我们就需要先给客户端一个结果然后再异步发送消息。 ### 方法 1. 使用curl扩展,设置超时为一秒,请求脚本一秒后断开,脚本还是在执行的队列中。 2. ob函数,fastcgi_finish_request函数,ignore_user_abort函数,实现代码如下: ```php // 这里执行必要的程序代码 ob_start(); echo 'success'; //输出执行的结果 $size_o = ob_get_length(); header("Content-Length: $size_o"); header('Connection: close'); header("HTTP/1.1 200 OK"); header("Content-Type: application/json;charset=utf-8"); ob_end_flush(); if(ob_get_length()) { ob_flush(); flush(); } if (function_exists("fastcgi_finish_request")) { fastcgi_finish_request(); } ignore_user_abort(true); set_time_limit(10); // 以下执行耗时并且不影响结果的程序(请记录日志) 万一没有执行成功需要二次执行 ```