private function startWithAdvancedClusters()
{
$longOpts = ['worker', 'task'];
$options = getopt('', $longOpts);
if (isset($options['worker'])) {
# 仅仅用作 worker 服务器
$this->startWorkerServer();
} elseif (isset($options['task'])) {
# 仅仅用作 Task 服务器
$this->startTaskServer();
} else {
# 二者都有, 开启一个子进程单独启动task相关服务
$process = new \Swoole\Process(function ($worker) {
/**
* @var \Swoole\Process $worker
*/
$this->startTaskServer();
});
$process->start();
# 任务进程会通过独立服务启动, 所以这里强制设置成0
$config = self::$config['swoole'];
$config['task_worker_num'] = 0;
$config['task_max_request'] = 0;
$this->startWorkerServer($config);
}
return true;
}