<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                **使用 think-swoole 的 Task 異步任務的步驟** 1. 定義事件監聽類(php think make:listener 類名)。 2. app/event.php 文件中定義 swoole.task 的事件監聽。 3. 獲取到 Swoole/Server 對象調用 task 方法(參數中傳遞剛剛定義的監聽類)。 4. 在剛剛定義的事件監聽類的 handle 方法中定義觸發回調邏輯代碼。 5. 調用觸發 task swoole.finish任務完成后的 finish 方法(需要才調用,非必須)。 **一、項目根目錄創建短信發送事件:** 創建成功后,在app目錄下會生成listener目錄以及SmsTask.php,SmsTaskFinish.php ~~~ php think make:listener SmsTask php think make:listener SmsTaskFinish ~~~ ![](https://img.kancloud.cn/a9/a5/a9a526b8ebf3aac837feb6fa5f381eb3_571x188.png) **二、在app/event.php中定義短信發送事件:** ~~~ <?php // 事件定義文件 return [ 'bind' => [ ], 'listen' => [ 'AppInit' => [], 'HttpRun' => [], 'HttpEnd' => [], 'LogLevel' => [], 'LogWrite' => [], 'swoole.task' => [ app\listener\SmsTask::class, ], 'swoole.finish' => [ app\listener\SmsTaskFinish::class, ], ], 'subscribe' => [ ], ]; ~~~ > 其中`swoole.task`這個鍵名是 Task 任務固定寫法不能隨意命名 > \[danger\] 其中`swoole.finish`這個鍵名是 Task 通知當前異步任務已經完成固定寫法不能隨意命名 **三、完善 SmsTask.php 的邏輯代碼** ~~~ <?php declare (strict_types = 1); namespace app\listener; class SmsTask { /** * 事件監聽處理 * * @return mixed */ public function handle($event) { var_dump($event->data);//event的data數據即server->task()傳入的數據 echo "開始發送短信:".time().PHP_EOL; //模擬耗時 3 秒,測試是否在響應事件內 sleep(3); echo "短信發送成功:".time().PHP_EOL; // 可以調用 finish 方法通知其他事件類,通知當前異步任務已經完成了(非必須調用) // 參數 $event 是 Swoole\Server\Task 類的一個對象 可以調用 finish 方法觸發 task 任務的 onFinish 事件 $event->finish($event->data); return; } } ~~~ **四、完善SmsTaskFinish.php 的邏輯代碼** ~~~ <?php declare (strict_types = 1); namespace app\listener; class SmsTaskFinish { /** * 事件監聽處理 * * @return mixed */ public function handle($event) { echo "finish"; //這里的第三個索引才是onTask傳入的data數據 var_dump($event[2]); return; } } ~~~ **五、完善Register.php 的邏輯代碼** ~~~ <?php // +---------------------------------------------------------------------- // | najing [ 通用后臺管理系統 ] // +---------------------------------------------------------------------- // | Copyright (c) 2020 http://www.najingquan.com All rights reserved. // +---------------------------------------------------------------------- // | Author: 救火隊隊長 // +---------------------------------------------------------------------- namespace app\admin\controller; use app\BaseController; /** * 用戶注冊 * Class Register * @package app\admin\controller */ class Register extends BaseController { public function register() { //TODO 調用驗證類驗證數據 //TODO 將注冊信息插入數據庫 //異步模擬發送短信 $manager = app('\think\swoole\Manager'); $data = [ 'task' => 'sendSms', 'mobile' => '152****6268', ]; //傳遞參數 $manager->getServer()->task($data); return "注冊成功!".time(); } } ~~~ 訪問注冊的方法,測試一下發送短信的時間是否計入用戶注冊方法內: ![](https://img.kancloud.cn/f8/69/f8690b9be36a553bcf68d6e9b589b6ce_680x157.png) 控制臺打印信息: 開始發送短信:1590425425 短信發送成功:1590425428 finish 可見,短信發送的 3 秒鐘是異步進行的,用戶并無感知。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看