コード例 #1
0
ファイル: Worker.php プロジェクト: AimuTran/workerman-for-win
 /**
  * 执行关闭流程
  * @return void
  */
 public static function stopAll()
 {
     self::$_status = self::STATUS_SHUTDOWN;
     exit(0);
 }
コード例 #2
0
ファイル: Worker.php プロジェクト: hongbo819/webChat
 /**
  * 执行关闭流程
  * @return void
  */
 public static function stopAll()
 {
     self::$_status = self::STATUS_SHUTDOWN;
     // 主进程部分
     if (self::$_masterPid === posix_getpid()) {
         self::log("Workerman[" . basename(self::$_startFile) . "] Stopping ...");
         $worker_pid_array = self::getAllWorkerPids();
         // 向所有子进程发送SIGINT信号,表明关闭服务
         foreach ($worker_pid_array as $worker_pid) {
             posix_kill($worker_pid, SIGINT);
             Timer::add(self::KILL_WORKER_TIMER_TIME, 'posix_kill', array($worker_pid, SIGKILL), false);
         }
     } else {
         // 执行stop逻辑
         foreach (self::$_workers as $worker) {
             $worker->stop();
         }
         exit(0);
     }
 }
コード例 #3
0
ファイル: Worker.php プロジェクト: TongJiankang/Workerman
 /**
  * Run worker instance.
  * @return void
  */
 public function run()
 {
     //Update process state.
     self::$_status = self::STATUS_RUNNING;
     // Eegister shutdown function for checking errors.
     register_shutdown_function(array("\\Workerman\\Worker", 'checkErrors'));
     // Set autoload root path.
     Autoloader::setRootPath($this->_autoloadRootPath);
     // Create a global event loop.
     if (!self::$globalEvent) {
         $eventLoopClass = "\\Workerman\\Events\\" . ucfirst(self::getEventLoopName());
         self::$globalEvent = new $eventLoopClass();
         // Register a listener to be notified when server socket is ready to read.
         if ($this->_socketName) {
             if ($this->transport !== 'udp') {
                 self::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, array($this, 'acceptConnection'));
             } else {
                 self::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, array($this, 'acceptUdpConnection'));
             }
         }
     }
     // Reinstall signal.
     self::reinstallSignal();
     // Init Timer.
     Timer::init(self::$globalEvent);
     // Try to emit onWorkerStart callback.
     if ($this->onWorkerStart) {
         try {
             call_user_func($this->onWorkerStart, $this);
         } catch (\Exception $e) {
             echo $e;
             exit(250);
         }
     }
     // Main loop.
     self::$globalEvent->loop();
 }
コード例 #4
0
ファイル: Worker.php プロジェクト: wanghongwu/Workerman
 /**
  * 运行worker实例
  */
 public function run()
 {
     //更新 Worker 状态
     self::$_status = self::STATUS_RUNNING;
     // 注册进程退出回调,用来检查是否有错误
     register_shutdown_function(array("\\Workerman\\Worker", 'checkErrors'));
     // 设置自动加载根目录
     Autoloader::setRootPath($this->_appInitPath);
     // 如果没有全局事件轮询,则创建一个
     if (!self::$globalEvent) {
         if (extension_loaded('libevent')) {
             self::$globalEvent = new Libevent();
         } else {
             self::$globalEvent = new Select();
         }
         // 监听_mainSocket上的可读事件(客户端连接事件)
         if ($this->_socketName) {
             if ($this->transport !== 'udp') {
                 self::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, array($this, 'acceptConnection'));
             } else {
                 self::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, array($this, 'acceptUdpConnection'));
             }
         }
     }
     // 重新安装事件处理函数,使用全局事件轮询监听信号事件
     self::reinstallSignal();
     // 用全局事件轮询初始化定时器
     Timer::init(self::$globalEvent);
     // 如果有设置进程启动回调,则执行
     if ($this->onWorkerStart) {
         call_user_func($this->onWorkerStart, $this);
     }
     // 子进程主循环
     self::$globalEvent->loop();
 }