mirror of
https://github.com/zhamao-robot/zhamao-framework.git
synced 2026-03-17 20:54:52 +08:00
fix swoole timer stuck
This commit is contained in:
parent
dfe4613eac
commit
52030e8db3
@ -109,7 +109,8 @@ class WorkerEventListener
|
||||
}
|
||||
// Windows 系统的 CtrlC 由于和 Select 有一定的冲突,如果没事件解析的话 CtrlC 会阻塞,所以必须添加一个空的计时器
|
||||
if (PHP_OS_FAMILY === 'Windows') {
|
||||
Framework::getInstance()->getDriver()->getEventLoop()->addTimer(1000, function () {}, 0);
|
||||
Framework::getInstance()->getDriver()->getEventLoop()->addTimer(1000, function () {
|
||||
}, 0);
|
||||
}
|
||||
// 回显 debug 日志:进程占用的内存
|
||||
$memory_total = memory_get_usage() / 1024 / 1024;
|
||||
@ -121,6 +122,14 @@ class WorkerEventListener
|
||||
logger()->debug('{is_task}Worker 进程 #{id} 已启动', ['is_task' => ProcessStateManager::isTaskWorker() ? 'Task' : '', 'id' => ProcessManager::getProcessId()]);
|
||||
}
|
||||
|
||||
public function onWorkerExit(): void
|
||||
{
|
||||
// 清除计时器
|
||||
Framework::getInstance()->getDriver()->getEventLoop()->clearAllTimer();
|
||||
$worker_id = ProcessManager::getProcessId();
|
||||
logger()->notice('正在结束 Worker #' . $worker_id . ' 中的任务...');
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws ZMKnownException
|
||||
* @throws \JsonException
|
||||
@ -132,6 +141,11 @@ class WorkerEventListener
|
||||
}
|
||||
logger()->debug('{is_task}Worker 进程 #{id} 正在停止', ['is_task' => ProcessStateManager::isTaskWorker() ? 'Task' : '', 'id' => ProcessManager::getProcessId()]);
|
||||
|
||||
if (Framework::getInstance()->getDriver()->getName() !== 'swoole') {
|
||||
logger()->debug('清除计时器中');
|
||||
Framework::getInstance()->getDriver()->getEventLoop()->clearAllTimer();
|
||||
}
|
||||
|
||||
if (DIRECTORY_SEPARATOR !== '\\') {
|
||||
ProcessStateManager::removeProcessState(ProcessStateManager::isTaskWorker() ? ZM_PROCESS_TASKWORKER : ZM_PROCESS_WORKER, ProcessManager::getProcessId());
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ use OneBot\Driver\Event\DriverInitEvent;
|
||||
use OneBot\Driver\Event\Http\HttpRequestEvent;
|
||||
use OneBot\Driver\Event\Process\ManagerStartEvent;
|
||||
use OneBot\Driver\Event\Process\ManagerStopEvent;
|
||||
use OneBot\Driver\Event\Process\WorkerExitEvent;
|
||||
use OneBot\Driver\Event\Process\WorkerStartEvent;
|
||||
use OneBot\Driver\Event\Process\WorkerStopEvent;
|
||||
use OneBot\Driver\Event\WebSocket\WebSocketCloseEvent;
|
||||
@ -235,6 +236,7 @@ class Framework
|
||||
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);
|
||||
ob_event_provider()->addEventListener(WorkerExitEvent::getName(), [WorkerEventListener::getInstance(), 'onWorkerExit'], 999);
|
||||
// Http 事件
|
||||
ob_event_provider()->addEventListener(HttpRequestEvent::getName(), [HttpEventListener::getInstance(), 'onRequest999'], 999);
|
||||
ob_event_provider()->addEventListener(HttpRequestEvent::getName(), [HttpEventListener::getInstance(), 'onRequest1'], 1);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user