Files
kiri-core/System/Async.php
T

59 lines
957 B
PHP
Raw Normal View History

2021-01-04 18:21:37 +08:00
<?php
namespace Snowflake;
use Exception;
use HttpServer\IInterface\Task;
2021-03-19 17:09:52 +08:00
use ReflectionException;
2021-01-04 18:21:37 +08:00
use Snowflake\Abstracts\Component;
/**
* Class Async
* @package Snowflake
*/
class Async extends Component
{
2021-03-24 17:02:12 +08:00
private array $_absences = [];
2021-01-04 18:21:37 +08:00
/**
2021-03-24 17:02:12 +08:00
* @param string $name
* @param Task $handler
*/
public function addAsync(string $name, Task $handler)
{
$this->_absences[$name] = $handler;
}
/**
* @param string $name
2021-03-19 17:09:52 +08:00
* @param array $params
2021-01-04 18:21:37 +08:00
* @throws Exception
*/
2021-03-24 17:34:25 +08:00
public function dispatch(string $name, array $params = [])
2021-01-04 18:21:37 +08:00
{
2021-01-28 11:27:53 +08:00
$server = Snowflake::app()->getSwoole();
2021-03-24 17:02:12 +08:00
if (!isset($server->setting['task_worker_num'])) {
return;
}
if (!isset($this->_absences[$name])) {
2021-01-04 18:21:37 +08:00
return;
}
2021-03-19 17:09:52 +08:00
/** @var Task $class */
2021-03-24 17:02:12 +08:00
$class = $this->_absences[$name];
2021-03-19 17:09:52 +08:00
$class->setParams($params);
2021-01-04 18:21:37 +08:00
$randWorkerId = random_int(0, $server->setting['task_worker_num'] - 1);
2021-03-24 17:57:08 +08:00
$server->task(swoole_serialize($class), $randWorkerId);
2021-01-04 18:21:37 +08:00
}
}