diff --git a/HttpServer/Events/OnPipeMessage.php b/HttpServer/Events/OnPipeMessage.php index 2725832e..212a0fbe 100644 --- a/HttpServer/Events/OnPipeMessage.php +++ b/HttpServer/Events/OnPipeMessage.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace HttpServer\Events; +use Annotation\Loader; use Exception; use HttpServer\Abstracts\Callback; use Snowflake\Event; @@ -18,18 +19,26 @@ use Swoole\Server; class OnPipeMessage extends Callback { - /** - * @param Server $server - * @param int $src_worker_id - * @param $message - * @throws ComponentException - * @throws Exception - */ - public function onHandler(Server $server, int $src_worker_id, $message) - { - // TODO: Implement onHandler() method. - $events = Snowflake::app()->getEvent(); - $events->trigger(Event::PIPE_MESSAGE, [$server, $src_worker_id, $message]); - } + /** + * @param Server $server + * @param int $src_worker_id + * @param $message + * @throws ComponentException + * @throws Exception + */ + public function onHandler(Server $server, int $src_worker_id, $message) + { + // TODO: Implement onHandler() method. + if (is_array($message) && ($message[1] ?? null) instanceof Loader) { + if ($src_worker_id > $server->setting['worker_num']) { + $message[1]->loadByDirectory(MODEL_PATH); + } else { + $message[1]->loadByDirectory(APP_PATH); + } + } else { + $events = Snowflake::app()->getEvent(); + $events->trigger(Event::PIPE_MESSAGE, [$server, $src_worker_id, $message]); + } + } } diff --git a/HttpServer/Events/OnWorkerStart.php b/HttpServer/Events/OnWorkerStart.php index 8dc5e766..ac90a0c5 100644 --- a/HttpServer/Events/OnWorkerStart.php +++ b/HttpServer/Events/OnWorkerStart.php @@ -39,13 +39,10 @@ class OnWorkerStart extends Callback name($server->worker_pid, $worker_id >= $server->setting['worker_num'] ? 'task' : 'worker'); - $loader = Snowflake::app()->get(ServerInotify::class)->getLoader(); - var_dump($loader); - if ($worker_id >= $server->setting['worker_num']) { - $this->onTask($server, $worker_id, $loader); + $this->onTask($server, $worker_id); } else { - $this->onWorker($server, $worker_id, $loader); + $this->onWorker($server, $worker_id); } } @@ -55,14 +52,12 @@ class OnWorkerStart extends Callback * @param int $worker_id * @throws Exception */ - public function onTask(Server $server, int $worker_id, Loader $loader) + public function onTask(Server $server, int $worker_id) { putenv('environmental=' . Snowflake::TASK); Snowflake::setTaskId($server->worker_pid); - $loader->loadByDirectory(MODEL_PATH); - fire(Event::SERVER_TASK_START); } @@ -72,13 +67,11 @@ class OnWorkerStart extends Callback * @param int $worker_id * @throws Exception */ - public function onWorker(Server $server, int $worker_id, Loader $loader) + public function onWorker(Server $server, int $worker_id) { Snowflake::setWorkerId($server->worker_pid); putenv('environmental=' . Snowflake::WORKER); - $loader->loadByDirectory(APP_PATH); - try { fire(Event::SERVER_WORKER_START, [$worker_id]); } catch (\Throwable $exception) { diff --git a/System/Process/ServerInotify.php b/System/Process/ServerInotify.php index fc0a75d0..193ade05 100644 --- a/System/Process/ServerInotify.php +++ b/System/Process/ServerInotify.php @@ -50,7 +50,8 @@ class ServerInotify extends Process */ public function getLoader() { - return $this->getLoader(); + $annotation = Snowflake::app()->getAnnotation(); + return $annotation->getLoader(); } @@ -73,6 +74,16 @@ class ServerInotify extends Process if (!is_dir($dir)) continue; $this->watch($dir); } + + $worker = Snowflake::app()->getSwoole(); + + $workerNum = $worker->setting['worker_num']; + $task_worker_num = $worker->setting['task_worker_num'] ?? 0; + + for ($i = 0; $i < $workerNum + $task_worker_num; $i++) { + $worker->sendMessage(['reload', $this->getLoader()], $i); + } + Event::add($this->inotify, [$this, 'check']); Event::wait(); } else {