网站内链怎么布局,tornado网站开发 教程,外国s网站建设,网站建设平台合同学习路之PHP --异步执行功能 #xff08;无需安装任何框架#xff09; 简介一、工具类二、调用三、异步任务的操作四、效果#xff1a; 简介
执行异步任务是一种很常见的需求#xff0c;如批量发邮箱#xff0c;短信等等执行耗时任务时#xff0c;需要程序异步执行… 学习路之PHP --异步执行功能 无需安装任何框架 简介一、工具类二、调用三、异步任务的操作四、效果 简介
执行异步任务是一种很常见的需求如批量发邮箱短信等等执行耗时任务时需要程序异步执行给用户带来好的体验。
在php异步执行代码就很尬尴不像java 可以创建多线程在php中也可以用pcntl_fork()实现创建子进程来实现异步但这样可能会产生很多僵尸进程。其他的方式借助框架实现如优秀的swoole框架本文介绍无需安装如何框架扩展php自带的方式处理下面直接上代码我用的thinkphp6
一、工具类
extend\util\AsyncHook.php代码如下
?php
namespace util;class AsyncHook
{private static $hook_list array();private static $hooked false;/*** hook函数fastcgi_finish_request执行** param callback $callback* param array $params*/public static function hook($callback, $params []){trace(这里是.__CLASS__.\\.__FUNCTION__);self::$hook_list[] array(callback $callback, params $params);if (self::$hooked false) {self::$hooked true;register_shutdown_function(array(__CLASS__, __run));}}/*** 由系统自动调用支持win10:phpstudy** return void*/public static function __run(){if (function_exists(fastcgi_finish_request)) {fastcgi_finish_request();}if (empty(self::$hook_list)) {return;}foreach (self::$hook_list as $hook) {$callback $hook[callback];$params $hook[params];call_user_func_array($callback, $params);}}}二、调用
route\app.php
Route::get(helloasync, function () {$namespaceClass app\\api\\Task\\Test;$classObj app($namespaceClass);\util\AsyncHook::hook([$classObj,index],[name1,age18]);return 执行完成;// $this-success(执行完成);});三、异步任务的操作
?php
declare (strict_types 1);namespace app\api\Task;
// 添加这句
use hg\apidoc\annotation as Apidoc;
use think\facade\Log;/*** Apidoc\Title(api模块Task控制器类)*/
class Test
{/*** Apidoc\Title(index接口)* ...*/ public function index(...$params){var_dump($params);// var_dump($params2);[$name,$name2]$params;var_dump($name);var_dump($name2);echo 您好这是一个异步任务的操作.__CLASS__.\\.__FUNCTION__;}
}
四、效果
执行结果会先’执行完成’后执行hook中的Test index方法。