/** * 初始化所有的worker实例,主要工作为获得格式化所需数据及监听端口 * @return void */ protected static function initWorkers() { /** @var static $worker */ foreach (self::$_workers as $worker) { // 没有设置worker名称,则使用none代替 if (empty($worker->name)) { $worker->name = 'none'; } // 获得所有worker名称中最大长度 $worker_name_length = strlen($worker->name); if (self::$_maxWorkerNameLength < $worker_name_length) { self::$_maxWorkerNameLength = $worker_name_length; } // 获得所有_socketName中最大长度 $socket_name_length = strlen($worker->getSocketName()); if (self::$_maxSocketNameLength < $socket_name_length) { self::$_maxSocketNameLength = $socket_name_length; } // 获得运行用户名的最大长度 if (empty($worker->user) || posix_getuid() !== 0) { $worker->user = self::getCurrentUser(); } $user_name_length = strlen($worker->user); if (self::$_maxUserNameLength < $user_name_length) { self::$_maxUserNameLength = $user_name_length; } // 如果端口不可复用,则直接在主进程就监听 if (!$worker->reusePort) { // 监听端口 $worker->listen(); } } }