This commit is contained in:
2021-03-24 17:02:12 +08:00
parent 61cd5433cc
commit efe9edf727
2 changed files with 63 additions and 5 deletions
+42
View File
@@ -0,0 +1,42 @@
<?php
namespace Annotation;
use Exception;
use Snowflake\Snowflake;
/**
* Class Asynchronous
* @package Annotation
* Task任务
*/
#[\Attribute(\Attribute::TARGET_CLASS)] class Asynchronous extends Attribute
{
/**
* Asynchronous constructor.
* @param string $name
*/
public function __construct(public string $name)
{
}
/**
* @param array $handler
* @return bool
* @throws Exception
*/
public function execute(array $handler): bool
{
$async = Snowflake::app()->getAsync();
$async->addAsync($this->name, current($handler));
return true;
}
}
+21 -5
View File
@@ -17,21 +17,37 @@ class Async extends Component
{
private array $_absences = [];
/**
* @param string $class
* @param string $name
* @param Task $handler
*/
public function addAsync(string $name, Task $handler)
{
$this->_absences[$name] = $handler;
}
/**
* @param string $name
* @param array $params
* @throws Exception
* @throws ReflectionException
*/
public function dispatch(string $class, array $params)
public function dispatch(string $name, array $params)
{
$server = Snowflake::app()->getSwoole();
if (!isset($server->setting['task_worker_num']) || !class_exists($class)) {
if (!isset($server->setting['task_worker_num'])) {
return;
}
if (!isset($this->_absences[$name])) {
return;
}
/** @var Task $class */
$class = Snowflake::createObject($class);
$class = $this->_absences[$name];
$class->setParams($params);
$randWorkerId = random_int(0, $server->setting['task_worker_num'] - 1);