diff --git a/HttpServer/Events/OnFinish.php b/HttpServer/Events/OnFinish.php index d36f6fd8..533af401 100644 --- a/HttpServer/Events/OnFinish.php +++ b/HttpServer/Events/OnFinish.php @@ -6,6 +6,7 @@ namespace HttpServer\Events; use Exception; use HttpServer\Abstracts\Callback; +use Snowflake\Snowflake; use Swoole\Server; /** @@ -25,6 +26,8 @@ class OnFinish extends Callback $data = json_decode($data, true); $data['work_id'] = $task_id; $this->write(var_export($data, true), 'Task'); + + Snowflake::app()->decrement(); } } diff --git a/HttpServer/Events/OnTask.php b/HttpServer/Events/OnTask.php index efdfc765..ca0b9926 100644 --- a/HttpServer/Events/OnTask.php +++ b/HttpServer/Events/OnTask.php @@ -98,8 +98,9 @@ class OnTask extends Callback */ private function runTaskHandler($data): ?array { - $serialize = $this->before($data); + Snowflake::app()->increment(); try { + $serialize = $this->before($data); $params = $serialize->getParams(); if (is_object($params)) { $params = get_object_vars($params); diff --git a/HttpServer/Events/OnWorkerStart.php b/HttpServer/Events/OnWorkerStart.php index 68d2d817..652912e4 100644 --- a/HttpServer/Events/OnWorkerStart.php +++ b/HttpServer/Events/OnWorkerStart.php @@ -22,6 +22,9 @@ class OnWorkerStart extends Callback { + private int $_taskTable = 0; + + /** * @param Server $server * @param int $worker_id @@ -54,7 +57,6 @@ class OnWorkerStart extends Callback * @param Server $server * @param int $workerId * 异步任务管制 - * @throws ComponentException */ public function onTaskSignal(Server $server, int $workerId) { @@ -63,11 +65,7 @@ class OnWorkerStart extends Callback if ($sigkill === false) { return $server->stop($workerId); } - - $this->error(env('workerId') . '::' . $server->getWorkerStatus($workerId)); - $this->error(env('workerId') . '::' . $server->stats()['coroutine_num']); - - while ($server->getWorkerStatus($workerId) === SWOOLE_WORKER_BUSY) { + while (Snowflake::app()->isRun()) { Coroutine::sleep(0.01); } return $server->stop($workerId); diff --git a/System/Abstracts/BaseApplication.php b/System/Abstracts/BaseApplication.php index 56898182..97c6d073 100644 --- a/System/Abstracts/BaseApplication.php +++ b/System/Abstracts/BaseApplication.php @@ -50,6 +50,12 @@ abstract class BaseApplication extends Service use TraitApplication; + + private string $state = ''; + + + private int $taskNumber = 0; + /** * @var string */ @@ -78,6 +84,37 @@ abstract class BaseApplication extends Service } + /** + * @return bool + */ + public function isRun(): bool + { + return $this->state == 'SWOOLE_WORKER_BUSY'; + } + + + public function decrement() + { + $this->taskNumber -= 1; + if ($this->taskNumber <= 0) { + $this->taskNumber = 0; + $this->state = 'SWOOLE_WORKER_IDLE'; + } + } + + + public function increment() + { + $this->taskNumber += 1; + if ($this->taskNumber <= 0) { + $this->taskNumber = 0; + $this->state = 'SWOOLE_WORKER_IDLE'; + } else { + $this->state = 'SWOOLE_WORKER_BUSY'; + } + } + + /** * @return array */