/** * 停止当前worker实例 * @return void */ public function stop() { // 如果有设置进程终止回调,则执行 if ($this->onWorkerStop) { call_user_func($this->onWorkerStop, $this); } // 删除相关监听事件,关闭_mainSocket self::$globalEvent->del($this->_mainSocket, EventInterface::EV_READ); @fclose($this->_mainSocket); }
/** * 运行worker实例 */ public function run() { //更新 Worker 状态 self::$_status = self::STATUS_RUNNING; // 注册进程退出回调,用来检查是否有错误 register_shutdown_function(array("\\WorkerClient\\Worker", 'checkErrors')); // 设置自动加载根目录 Autoloader::setRootPath($this->_appInitPath); // 如果没有全局事件轮询,则创建一个 if (!self::$globalEvent) { if (extension_loaded('libevent')) { self::$globalEvent = new Libevent(); } else { self::$globalEvent = new Select(); } $this->connect(); } // 重新安装事件处理函数,使用全局事件轮询监听信号事件 self::reinstallSignal(); // 用全局事件轮询初始化定时器 Timer::init(self::$globalEvent); // 如果有设置进程启动回调,则执行 if ($this->onWorkerStart) { call_user_func($this->onWorkerStart, $this); } // 子进程主循环 self::$globalEvent->loop(); }