Пример #1
0
 /**
  * 运行worker实例
  */
 public function run()
 {
     // 注册进程退出回调,用来检查是否有错误
     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();
 }
Пример #2
0
 /**
  * 运行worker实例
  */
 public function run()
 {
     // 设置自动加载根目录
     Autoloader::setRootPath($this->_appInitPath);
     // 则创建一个全局事件轮询
     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'));
         }
     }
     // 用全局事件轮询初始化定时器
     Timer::init(self::$globalEvent);
     // 如果有设置进程启动回调,则执行
     if ($this->onWorkerStart) {
         call_user_func($this->onWorkerStart, $this);
     }
     // 子进程主循环
     self::$globalEvent->loop();
 }
Пример #3
0
 /**
  * 为子进程重新安装信号处理函数,使用全局事件轮询监听信号
  * @return void
  */
 protected static function reinstallSignal()
 {
     // uninstall force signal handler
     pcntl_signal(SIGHUP, SIG_IGN, false);
     // uninstall stop signal handler
     pcntl_signal(SIGINT, SIG_IGN, false);
     // uninstall reload signal handler
     pcntl_signal(SIGUSR1, SIG_IGN, false);
     // uninstall  status signal handler
     pcntl_signal(SIGUSR2, SIG_IGN, false);
     // reinstall force signal handler
     self::$globalEvent->add(SIGHUP, EventInterface::EV_SIGNAL, array('\\WorkerClient\\Worker', 'signalHandler'));
     // reinstall stop signal handler
     self::$globalEvent->add(SIGINT, EventInterface::EV_SIGNAL, array('\\WorkerClient\\Worker', 'signalHandler'));
     //  uninstall  reload signal handler
     self::$globalEvent->add(SIGUSR1, EventInterface::EV_SIGNAL, array('\\WorkerClient\\Worker', 'signalHandler'));
     // uninstall  status signal handler
     self::$globalEvent->add(SIGUSR2, EventInterface::EV_SIGNAL, array('\\WorkerClient\\Worker', 'signalHandler'));
 }