diff --git a/HttpServer/Events/OnWorkerStart.php b/HttpServer/Events/OnWorkerStart.php index 1b85b100..d540ae3f 100644 --- a/HttpServer/Events/OnWorkerStart.php +++ b/HttpServer/Events/OnWorkerStart.php @@ -40,7 +40,6 @@ class OnWorkerStart extends Callback */ public function onHandler(Server $server, int $worker_id): void { - Coroutine::set(['enable_deadlock_check' => false]); putenv('workerId=' . $worker_id); $get_name = $this->get_process_name($server, $worker_id); @@ -48,7 +47,7 @@ class OnWorkerStart extends Callback swoole_set_process_name($get_name); } - $this->onSignal($server, $worker_id); +// $this->onSignal($server, $worker_id); if ($worker_id >= $server->setting['worker_num']) { fire(Event::SERVER_TASK_START); @@ -65,18 +64,18 @@ class OnWorkerStart extends Callback * @param $server * @param $worker_id */ - public function onSignal($server, $worker_id) - { - $this->debug(sprintf(workerName($worker_id) . ' #%d is start.....', $worker_id)); +// public function onSignal($server, $worker_id) +// { +// $this->debug(sprintf(workerName($worker_id) . ' #%d is start.....', $worker_id)); // Coroutine\go(function (Server $server, $worker_id) { - Coroutine::waitSignal($this->signal); - while (Co::stats()['coroutine_num'] > 0) { - var_dump(Co::stats()['coroutine_num']); - sleep(1); - } - return $server->stop($worker_id, true); +// Coroutine::waitSignal($this->signal); +// while (Co::stats()['coroutine_num'] > 0) { +// var_dump(Co::stats()['coroutine_num']); +// Coroutine::sleep(1); +// } +// return $server->stop($worker_id, true); // }, $server, $worker_id); - } +// } /** diff --git a/HttpServer/Server.php b/HttpServer/Server.php index d4832335..d50c1d67 100644 --- a/HttpServer/Server.php +++ b/HttpServer/Server.php @@ -24,8 +24,10 @@ use Snowflake\Exception\NotFindClassException; use Snowflake\Process\Biomonitoring; use Snowflake\Process\ServerInotify; use Snowflake\Snowflake; +use Swoole\Coroutine; use Swoole\Process; use Swoole\Runtime; +use co; /** * Class Server @@ -194,6 +196,16 @@ class Server extends HttpService $this->stop($this); } + private int $_types = SWOOLE_HOOK_TCP | + SWOOLE_HOOK_UNIX | + SWOOLE_HOOK_UDP | + SWOOLE_HOOK_UDG | + SWOOLE_HOOK_SSL | + SWOOLE_HOOK_TLS | + SWOOLE_HOOK_SLEEP | + SWOOLE_HOOK_STREAM_FUNCTION | + SWOOLE_HOOK_PROC; + /** * @param bool $isEnable @@ -203,16 +215,12 @@ class Server extends HttpService if (!$isEnable) { return; } - Runtime::enableCoroutine(true, SWOOLE_HOOK_TCP | - SWOOLE_HOOK_UNIX | - SWOOLE_HOOK_UDP | - SWOOLE_HOOK_UDG | - SWOOLE_HOOK_SSL | - SWOOLE_HOOK_TLS | - SWOOLE_HOOK_SLEEP | - SWOOLE_HOOK_STREAM_FUNCTION | - SWOOLE_HOOK_PROC - ); + Runtime::enableCoroutine(true, $this->_types); + $container['enable_deadlock_check'] = false; + $container['exit_condition'] = function () { + return Co::stats()['coroutine_num'] === 0; + }; + Coroutine::set($container); }