From 967bfa2b37fcf33a5093d9126c24ae65611669af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Tue, 2 Mar 2021 18:16:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HttpServer/Abstracts/Callback.php | 5 +---- HttpServer/Events/OnWorkerError.php | 6 ++++++ HttpServer/Events/OnWorkerExit.php | 6 ++++++ HttpServer/Events/OnWorkerStart.php | 5 +---- HttpServer/Events/OnWorkerStop.php | 6 ++++++ System/Abstracts/Pool.php | 8 ++++++++ 6 files changed, 28 insertions(+), 8 deletions(-) diff --git a/HttpServer/Abstracts/Callback.php b/HttpServer/Abstracts/Callback.php index b232b869..899f944d 100644 --- a/HttpServer/Abstracts/Callback.php +++ b/HttpServer/Abstracts/Callback.php @@ -33,11 +33,9 @@ abstract class Callback extends HttpService protected function clear($server, $worker_id, $message) { try { - Timer::clearAll(); - fire(Event::SYSTEM_RESOURCE_CLEAN); - \logger()->insert(); + \logger()->insert(); Snowflake::clearProcessId($server->worker_pid); @@ -52,7 +50,6 @@ abstract class Callback extends HttpService } - const EVENT_ERROR = 'WORKER:ERROR'; const EVENT_STOP = 'WORKER:STOP'; const EVENT_EXIT = 'WORKER:EXIT'; diff --git a/HttpServer/Events/OnWorkerError.php b/HttpServer/Events/OnWorkerError.php index aa172a02..6d4b9a7a 100644 --- a/HttpServer/Events/OnWorkerError.php +++ b/HttpServer/Events/OnWorkerError.php @@ -7,7 +7,9 @@ namespace HttpServer\Events; use Exception; use HttpServer\Abstracts\Callback; use Snowflake\Abstracts\Config; +use Snowflake\Event; use Snowflake\Exception\ConfigException; +use Snowflake\Snowflake; use Swoole\Coroutine; use Swoole\Server; @@ -28,6 +30,10 @@ class OnWorkerError extends Callback */ public function onHandler(Server $server, int $worker_id, int $worker_pid, int $exit_code, int $signal) { + $event = Snowflake::app()->getEvent(); + $event->trigger(Event::SERVER_WORKER_ERROR); + $event->offName(Event::SERVER_WORKER_ERROR); + $this->clear($server, $worker_id, self::EVENT_ERROR); if (!Config::has('email')) { return; diff --git a/HttpServer/Events/OnWorkerExit.php b/HttpServer/Events/OnWorkerExit.php index 5aa353f0..37b303b1 100644 --- a/HttpServer/Events/OnWorkerExit.php +++ b/HttpServer/Events/OnWorkerExit.php @@ -6,6 +6,8 @@ namespace HttpServer\Events; use Exception; use HttpServer\Abstracts\Callback; +use Snowflake\Event; +use Snowflake\Snowflake; /** * Class OnWorkerExit @@ -21,6 +23,10 @@ class OnWorkerExit extends Callback */ public function onHandler($server, $worker_id) { + $event = Snowflake::app()->getEvent(); + $event->trigger(Event::SERVER_WORKER_EXIT); + $event->offName(Event::SERVER_WORKER_EXIT); + $this->clear($server, $worker_id, self::EVENT_EXIT); } diff --git a/HttpServer/Events/OnWorkerStart.php b/HttpServer/Events/OnWorkerStart.php index c7d20892..f4e039e8 100644 --- a/HttpServer/Events/OnWorkerStart.php +++ b/HttpServer/Events/OnWorkerStart.php @@ -13,6 +13,7 @@ use Snowflake\Exception\ConfigException; use Snowflake\Snowflake; use Swoole\Coroutine; use Swoole\Server; +use Swoole\Timer; /** * Class OnWorkerStart @@ -26,7 +27,6 @@ class OnWorkerStart extends Callback private int $signal = SIGUSR1 | SIGKILL | SIGKILL; - /** * @param Server $server * @param int $worker_id @@ -44,9 +44,7 @@ class OnWorkerStart extends Callback } else { $this->onWorker($server, $worker_id); } - $this->debug(sprintf('%s #%d Pid:%d start.', ucfirst(env('environmental')), $worker_id, $server->worker_pid)); -// Coroutine\go([$this, 'onSignal'], $server, $worker_id); } @@ -85,7 +83,6 @@ class OnWorkerStart extends Callback } - /** * @param $server * @param $worker_id diff --git a/HttpServer/Events/OnWorkerStop.php b/HttpServer/Events/OnWorkerStop.php index 796cda10..77b1f568 100644 --- a/HttpServer/Events/OnWorkerStop.php +++ b/HttpServer/Events/OnWorkerStop.php @@ -6,6 +6,8 @@ namespace HttpServer\Events; use Exception; use HttpServer\Abstracts\Callback; +use Snowflake\Event; +use Snowflake\Snowflake; /** * Class OnWorkerStop @@ -22,6 +24,10 @@ class OnWorkerStop extends Callback */ public function onHandler($server, $worker_id) { + $event = Snowflake::app()->getEvent(); + $event->trigger(Event::SERVER_WORKER_STOP); + $event->offName(Event::SERVER_WORKER_STOP); + $this->clear($server, $worker_id, self::EVENT_STOP); } diff --git a/System/Abstracts/Pool.php b/System/Abstracts/Pool.php index 05b85f2d..ec0c0197 100644 --- a/System/Abstracts/Pool.php +++ b/System/Abstracts/Pool.php @@ -9,6 +9,7 @@ use Exception; use HttpServer\Http\Context; use JetBrains\PhpStorm\Pure; use Phalcon\Mvc\Model\Query\Lang; +use Snowflake\Event; use Snowflake\Exception\ComponentException; use Snowflake\Exception\ConfigException; use Snowflake\Snowflake; @@ -145,11 +146,18 @@ abstract class Pool extends Component /** * @param $name * @param mixed $callback + * @throws ComponentException + * @throws Exception */ private function createByCallback($name, mixed $callback) { if ($this->creates === -1 && !is_callable($callback)) { $this->creates = Timer::tick(1000, [$this, 'Heartbeat_detection']); + + $event = Snowflake::app()->getEvent(); + $event->on(Event::SERVER_WORKER_STOP, function () { + Timer::clear($this->creates); + }); } if (!Context::hasContext('create::client::ing::' . $name)) { $this->push($name, $this->createClient($name, $callback));