Esempio n. 1
0
 /**
  * 运行线程
  */
 public function run()
 {
     date_default_timezone_set('Asia/Shanghai');
     // 保存一个副本
     $this->mainSocket = $this->worker->mainSocket;
     // 改变当前工作目录
     chdir(WORKERMAN_ROOT_DIR);
     // 重新载入一次配置
     \Man\Core\Lib\Config::reload();
     // 载入入口文件
     require_once $this->worker->workerFile;
     // 入口文件类名
     $class_name = basename($this->worker->workerFile, '.php');
     // 实例化入口类
     $worker = new $class_name($this->worker->serviceName);
     // 如果该worker有配置监听端口,则将监听端口的socket传递给子进程
     if ($this->mainSocket) {
         $worker->setListendSocket($this->mainSocket);
     }
     // 使worker开始服务
     $worker->start();
 }
Esempio n. 2
0
 /**
  * 设置server信号处理函数
  * @param null $null
  * @param int $signal
  * @return void
  */
 public static function signalHandler($signal)
 {
     switch ($signal) {
         // 停止服务信号
         case SIGINT:
             self::notice("Workerman is shutting down");
             self::stop();
             break;
             // 测试用
         // 测试用
         case SIGUSR1:
             break;
             // worker退出信号
         // worker退出信号
         case SIGCHLD:
             // 这里什么也不做
             // self::checkWorkerExit();
             break;
             // 平滑重启server信号
         // 平滑重启server信号
         case SIGHUP:
             Config::reload();
             self::notice("Workerman reloading");
             $pid_worker_name_map = self::getPidWorkerNameMap();
             $pids_to_restart = array();
             foreach ($pid_worker_name_map as $pid => $worker_name) {
                 // 如果对应进程配置了不热启动则不重启对应进程
                 if (Config::get($worker_name . '.no_reload')) {
                     // 发送reload信号,以便触发onReload方法
                     posix_kill($pid, SIGHUP);
                     continue;
                 }
                 $pids_to_restart[] = $pid;
             }
             self::addToRestartPids($pids_to_restart);
             self::restartPids();
             break;
     }
 }