龙行博客

走路看风景,经历看人生,岁月留痕迹,人生留轨迹,17的历史,18的豪情,时间的匆忙,人生的风景,放开心胸往前走,成功再远行,放开理想往前走,梦想再行动。
现在位置:首页 > 编程语言 > PHP > Hyperf-Task使用

Hyperf-Task使用

龙行    PHP    2022-10-30    208    0评论    

Hyperf-Task使用操作流程

下载task组件

composer require hyperf/task

配置

因为 Task 并不是默认组件,所以在使用的时候需要在 server.php 增加 Task 相关的配置。

<?php

declare(strict_types=1);

use Hyperf\Server\Event;

return [
   // 这里省略了其它不相关的配置项
   'settings' => [
       // Task Worker 数量,根据您的服务器配置而配置适当的数量
       'task_worker_num' => 8,
       // 因为 `Task` 主要处理无法协程化的方法,所以这里推荐设为 `false`,避免协程下出现数据混淆的情况
       'task_enable_coroutine' => false,
   ],
   'callbacks' => [
       // Task callbacks
       Event::ON_TASK => [Hyperf\Framework\Bootstrap\TaskCallback::class, 'onTask'],
       Event::ON_FINISH => [Hyperf\Framework\Bootstrap\FinishCallback::class, 'onFinish'],
   ],
];

执行器使用:

官方推荐使用注解方法,task执行器比较麻烦 ;

先创建一个task服务使用执行器调用

<?php

namespace App\Task;

class TaskService
{

   public function task(int $time = 1000):bool
   {
       return $this->send($time);
   }

   public function send(int $time):bool
   {
       swoole_timer_tick($time, function ($timerIds) {
           $rand = $this->rand();
           echo '输出-'.$rand.PHP_EOL;
           if ($rand === 5) {
               swoole_timer_clear($timerIds);
           }
       });
       echo "执行完毕".PHP_EOL;
       return true;
   }

   public function rand():int
   {
       return rand(1, 9);
   }

}

执行器调用

$container = ApplicationContext::getContainer();
$exec = $container->get(TaskExecutor::class);
$exec->execute(new Task([TaskService::class, 'task'], [Coroutine::id()]));

注解使用

namespace App\Task;

use Hyperf\Task\Annotation\Task;
use Hyperf\Utils\Coroutine;

class TaskService
{
   /**
    * @Task()
    */
   public function task(int $time = 1000):bool
   {
       return $this->send($time);
   }
   
   public function send(int $time):bool
   {
       swoole_timer_tick($time, function ($timerIds) {
           $rand = $this->rand();
           echo '输出-'.$rand.PHP_EOL;
           if ($rand === 5) {
               swoole_timer_clear($timerIds);
           }
       });
       echo "执行完毕".PHP_EOL;
       return true;
   }

   public function rand():int
   {
       return rand(1, 9);
   }
   
}

调用

/**
* @Inject()
* @var TaskService
*/
protected $task;

public function index()
{
   $this->task->task();
}


评论一下 分享本文 赞助站长

赞助站长X

扫码赞助站长
联系站长
龙行博客
  • 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
  • 本文网址:https://www.liaotaoo.cn/417.html
  • 上篇文章:PHP生成唯一RequestID类
  • 下篇文章:Hyper服务消费者统一响应
  • swoole hyperf
快捷导航
联系博主
在线壁纸
给我留言
四四五五
音乐欣赏
返回顶部