PHP非阻塞执行程序的两种方法

2020-03-23  本文已影响0人  向南路人

方法1:

使用fastcgi_finish_request():
示例:

$data = [
  "code" => 0,
  "msg"  => ""
];
header("'Content-type:text/json'");
echo json_encode($data,JSON_UNESCAPED_UNICODE);
fastcgi_finish_request();//至此,响应已经返回给客户端,但程序还可以继续执行
......//N多操作,并不会占用接口响应时间
echo "hello";//此处不会再返回给客户端

方法2:

使用shell非阻塞方式执行php脚本:
示例:

$data = [
  "code" => 0,
  "msg"  => ""
];
shell_exec("/use/local/php/bin/php /www/t.php  > /dev/null 2>&1 &");//此脚本可以执行N多操作,不会占用接口响应时间
header("'Content-type:text/json'");
exit(json_encode($data,JSON_UNESCAPED_UNICODE));

需要注意的是shell脚本后面的参数" > /dev/null 2>&1 &",没有这些参数,执行shell也是会阻塞的,这些参数的作用是将命令输出的内容写入系统的一个回收站文件,这样程序就不会阻塞。此写法并不是唯一的。

上一篇 下一篇

猜你喜欢

热点阅读