MyQEE\Server\Server::onWorkerStart PHP Method

onWorkerStart() public method

进程启动
public onWorkerStart ( Swoole\Server $server, $workerId )
$server Swoole\Server
$workerId
    public function onWorkerStart($server, $workerId)
    {
        global $argv;
        if ($server->taskworker) {
            # 任务序号
            $taskId = $workerId - $server->setting['worker_num'];
            $className = self::$namespace . 'WorkerTask';
            if (!class_exists($className)) {
                # 停止服务
                if ($taskId === 0) {
                    self::warn("任务进程 {$className} 类不存在");
                }
                $className = '\\MyQEE\\Server\\WorkerTask';
            }
            # 内存限制
            ini_set('memory_limit', self::$config['server']['task_worker_memory_limit'] ?: '4G');
            static::setProcessName("php " . implode(' ', $argv) . " [task#{$taskId}]");
            self::$workerTask = new $className($server);
            self::$workerTask->id = $workerId;
            self::$workerTask->taskId = $workerId - $server->setting['worker_num'];
            self::$workerTask->onStart();
        } else {
            if ($workerId === 0 && self::$clustersType > 0) {
                # 集群模式, 第一个进程执行, 连接注册服务器
                $id = isset(Server::$config['clusters']['id']) && Server::$config['clusters']['id'] >= 0 ? (int) Server::$config['clusters']['id'] : -1;
                Register\Client::init(Server::$config['clusters']['group'] ?: 'default', $id, false);
            }
            $className = self::$namespace . 'WorkerMain';
            if (!class_exists($className)) {
                if ($workerId === 0) {
                    # 停止服务
                    self::warn("工作进程 {$className} 类不存在");
                }
                $className = '\\MyQEE\\Server\\Worker';
            }
            ini_set('memory_limit', self::$config['server']['worker_memory_limit'] ?: '2G');
            static::setProcessName("php " . implode(' ', $argv) . " [worker#{$workerId}]");
            self::$worker = new $className($server);
            self::$worker->name = 'Main';
            self::$workers['Main'] = self::$worker;
            # 加载自定义端口对象
            foreach (array_keys(self::$workers) as $name) {
                if ($name === 'Main') {
                    continue;
                }
                /**
                 * @var Worker $class
                 */
                $className = self::$namespace . "Worker{$name}";
                if (!class_exists($className)) {
                    if (in_array($name, ['API', 'Manager'])) {
                        # 使用系统自带的对象
                        $className = "\\MyQEE\\Server\\Worker{$name}";
                    } else {
                        unset(self::$workers[$name]);
                        if (self::$server->worker_id === 0) {
                            self::warn("{$className} 不存在, 已忽略对应监听");
                        }
                        continue;
                    }
                }
                # 构造对象
                $class = new $className($server);
                switch ($name) {
                    case 'API':
                        if ($class instanceof WorkerAPI) {
                            /**
                             * @var WorkerAPI $class
                             */
                            $class->prefix = self::$config['server']['http']['api_prefix'] ?: '/api/';
                            $class->prefixLength = strlen($class->prefix);
                        } else {
                            unset(self::$workers[$name]);
                            self::warn("忽略{$className} 服务, 必须继承 \\MyQEE\\Server\\WorkerAPI 类");
                            continue 2;
                        }
                        break;
                    case 'Manager':
                        if ($class instanceof WorkerManager) {
                            /**
                             * @var WorkerManager $class
                             */
                            $class->prefix = self::$config['server']['http']['manager_prefix'] ?: '/admin/';
                            $class->prefixLength = strlen($class->prefix);
                        } else {
                            unset(self::$workers[$name]);
                            self::warn("忽略 {$className} 服务, 必须继承 \\MyQEE\\Server\\WorkerManager 类");
                            continue 2;
                        }
                        break;
                    default:
                        if (!$class instanceof Worker) {
                            unset(self::$workers[$name]);
                            self::warn("忽略 {$name} 多协议服务, 对象 {$className} 必须继承 \\MyQEE\\Server 的 WorkerTCP 或 WorkerUDP 或 WorkerHttp 或 WorkerWebSocket");
                            continue 2;
                        }
                        break;
                }
                $class->name = $name;
                $class->worker = self::$worker;
                self::$workers[$name] = $class;
            }
            foreach (self::$workers as $class) {
                # 设置工作ID
                $class->id = $workerId;
                # 调用初始化方法
                $class->onStart();
            }
        }
    }