田文海 發表於 2019-8-19 10:48:00

PHP 异步执行方式

<div class="cnblogs_Highlighter">
<pre class="brush:php;gutter:true;">在工作中我们经常遇到一些比较耗时的任务,比如用户注册发送邮件,审核短信通知等功能,同步执行这些功能的话,响应时间就会变长,所以一般我们会用队列去管理这些功能,但是如果条件不允许怎么办,今天get了一个新方式;</pre>
</div>
<div class="cnblogs_Highlighter">
<pre class="brush:php;gutter:true;">&lt;?php

/**
* 进程关闭hook执行
*/
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) {
                self::$hook_list[] = array('callback' =&gt; $callback, 'params' =&gt; $params);
                if(self::$hooked == false) {
                        self::$hooked = true;
                        register_shutdown_function(array(__CLASS__, '__run'));
                }
        }
       
        /**
       * 由系统调用
       *
       * @return void
       */
        public static function __run() {
                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);
                }
        }
}
</pre>
</div>
<div class="cnblogs_Highlighter">
<pre class="brush:php;gutter:true;">/**调用方式   **/
AsyncHook::hook(array($this, 'sendEmail'), array());//面向对象调用
AsyncHook::hook('SmsService::sendSMS', array(trim($phone), $noticeWords));//面向过程方式调用
</pre>
</div>
<p>  </p>
<p>  </p><br><br>
来源:https://www.cnblogs.com/sweetsunnyflower/p/11375786.html
頁: [1]
查看完整版本: PHP 异步执行方式