diff --git a/config/global.php b/config/global.php index 8d3f9cce..b8700668 100644 --- a/config/global.php +++ b/config/global.php @@ -18,12 +18,6 @@ $config['servers'] = [ 'type' => 'http', 'flag' => 20002, ], - [ - 'host' => '0.0.0.0', - 'port' => 20003, - 'type' => 'http', - 'flag' => 20003, - ], ]; /* Workerman 驱动相关配置 */ diff --git a/src/Globals/global_functions.php b/src/Globals/global_functions.php index 55b1747f..a179240d 100644 --- a/src/Globals/global_functions.php +++ b/src/Globals/global_functions.php @@ -12,6 +12,7 @@ use ZM\Container\ContainerHolder; use ZM\Logger\ConsoleLogger; use ZM\Middleware\MiddlewareHandler; use ZM\Store\Database\DBException; +use ZM\Store\Database\DBQueryBuilder; use ZM\Store\Database\DBWrapper; // 防止重复引用引发报错 @@ -209,7 +210,7 @@ function db(string $name = '') * * @throws DBException */ -function sql_builder(string $name = '') +function sql_builder(string $name = ''): DBQueryBuilder { return (new DBWrapper($name))->createQueryBuilder(); } diff --git a/src/ZM/Event/Listener/WorkerEventListener.php b/src/ZM/Event/Listener/WorkerEventListener.php index 22c88d5c..6d051e87 100644 --- a/src/ZM/Event/Listener/WorkerEventListener.php +++ b/src/ZM/Event/Listener/WorkerEventListener.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace ZM\Event\Listener; +use OneBot\Driver\Coroutine\Adaptive; use OneBot\Driver\Process\ProcessManager; use OneBot\Util\Singleton; use ZM\Annotation\AnnotationHandler; @@ -35,6 +36,8 @@ class WorkerEventListener // 自注册一下,刷新当前进程的logger进程banner ob_logger_register(ob_logger()); + Adaptive::initWithDriver(Framework::getInstance()->getDriver()); + // 如果没有引入参数disable-safe-exit,则监听 Ctrl+C if (!Framework::getInstance()->getArgv()['disable-safe-exit'] && PHP_OS_FAMILY !== 'Windows') { SignalListener::getInstance()->signalWorker(); @@ -42,12 +45,10 @@ class WorkerEventListener // Windows 环境下,为了监听 Ctrl+C,只能开启终端输入 if (PHP_OS_FAMILY === 'Windows') { + logger()->debug('监听Windows的键盘输入'); sapi_windows_set_ctrl_handler([SignalListener::getInstance(), 'signalWindowsCtrlC']); - Framework::getInstance()->getDriver()->getEventLoop()->addReadEvent(STDIN, function ($x) {}); } - logger()->debug('Worker #' . ProcessManager::getProcessId() . ' started'); - // 设置 Worker 进程的状态和 ID 等信息 if (($name = Framework::getInstance()->getDriver()->getName()) === 'swoole') { /* @phpstan-ignore-next-line */ @@ -88,17 +89,23 @@ class WorkerEventListener $this->initUserPlugins(); // handle @Init annotation - $this->dispatchInit(); - + Adaptive::getCoroutine()->create(function () { + $this->dispatchInit(); + }); // 回显 debug 日志:进程占用的内存 $memory_total = memory_get_usage() / 1024 / 1024; logger()->debug('Worker process used ' . round($memory_total, 3) . ' MB'); } + public function onWorkerStart1(): void + { + logger()->debug('Worker #' . ProcessManager::getProcessId() . ' started'); + } + /** * @throws ZMKnownException */ - public function onWorkerStop999() + public function onWorkerStop999(): void { logger()->debug('Worker #' . ProcessManager::getProcessId() . ' stopping'); if (DIRECTORY_SEPARATOR !== '\\') { @@ -110,11 +117,16 @@ class WorkerEventListener } } + public function onWorkerStop1(): void + { + logger()->debug('Worker #' . ProcessManager::getProcessId() . ' stopped'); + } + /** * 加载用户代码资源,包括普通插件、单文件插件、Composer 插件等 * @throws \Throwable */ - private function initUserPlugins() + private function initUserPlugins(): void { logger()->debug('Loading user sources'); diff --git a/src/ZM/Framework.php b/src/ZM/Framework.php index 035527d6..67b0732f 100644 --- a/src/ZM/Framework.php +++ b/src/ZM/Framework.php @@ -46,7 +46,7 @@ class Framework public const VERSION_ID = 650; /** @var string 版本名称 */ - public const VERSION = '3.0.0-beta2'; + public const VERSION = '3.0.0-beta3'; /** @var array 传入的参数 */ protected array $argv; @@ -228,7 +228,9 @@ class Framework // 添加框架需要监听的顶层事件监听器 // worker 事件 ob_event_provider()->addEventListener(WorkerStartEvent::getName(), [WorkerEventListener::getInstance(), 'onWorkerStart999'], 999); + ob_event_provider()->addEventListener(WorkerStartEvent::getName(), [WorkerEventListener::getInstance(), 'onWorkerStart1'], 1); ob_event_provider()->addEventListener(WorkerStopEvent::getName(), [WorkerEventListener::getInstance(), 'onWorkerStop999'], 999); + ob_event_provider()->addEventListener(WorkerStopEvent::getName(), [WorkerEventListener::getInstance(), 'onWorkerStop1'], 1); // Http 事件 ob_event_provider()->addEventListener(HttpRequestEvent::getName(), [HttpEventListener::getInstance(), 'onRequest999'], 999); ob_event_provider()->addEventListener(HttpRequestEvent::getName(), [HttpEventListener::getInstance(), 'onRequest1'], 1);