protected function checkConfig()
{
if (isset(self::$config['server']['mode']) && self::$config['server']['mode'] === 'base') {
# 用 BASE 模式启动
self::$serverMode = SWOOLE_BASE;
}
self::$config['server']['sock_type'] = (int) self::$config['server']['sock_type'];
if (self::$config['server']['sock_type'] < 1 || self::$config['server']['sock_type'] > 6) {
self::$config['server']['sock_type'] = 1;
}
# 设置启动模式
if (isset(self::$config['server']['http']['use'])) {
if (self::$config['server']['http']['use'] && isset(self::$config['server']['http']['websocket']) && self::$config['server']['http']['websocket']) {
self::$serverType = 3;
} elseif (self::$config['server']['http']['use']) {
self::$serverType = 1;
} elseif (isset(self::$config['server']['http']['websocket']) && self::$config['server']['http']['websocket']) {
self::$serverType = 2;
}
}
if (self::$serverType === 3 || self::$serverType === 1) {
# 开启API
if (self::$config['server']['http']['api']) {
self::$workers['API'] = 'API';
}
# 开启管理
if (self::$config['server']['http']['manager']) {
self::$workers['Manager'] = 'Manager';
}
}
global $argv;
if (in_array('-vvv', $argv)) {
self::$config['server']['log']['level'][] = 'info';
self::$config['server']['log']['level'][] = 'debug';
self::$config['server']['log']['level'][] = 'trace';
error_reporting(E_ALL ^ E_NOTICE);
} elseif (in_array('-vv', $argv) || isset($option['debug'])) {
self::$config['server']['log']['level'][] = 'info';
self::$config['server']['log']['level'][] = 'debug';
} elseif (in_array('-v', $argv)) {
self::$config['server']['log']['level'][] = 'info';
}
if (isset(self::$config['server']['log']['level'])) {
self::$config['server']['log']['level'] = array_unique((array) self::$config['server']['log']['level']);
}
# 设置log等级
foreach (self::$config['server']['log']['level'] as $type) {
if (isset(self::$config['server']['log']['path']) && self::$config['server']['log']['path']) {
self::$logPath[$type] = str_replace('$type', $type, self::$config['server']['log']['path']);
if (is_file(self::$logPath[$type]) && !is_writable(self::$logPath[$type])) {
echo "给定的log文件不可写: " . self::$logPath[$type] . "\n";
}
} else {
self::$logPath[$type] = true;
}
}
# 设置 swoole 的log输出路径
if (isset(self::$config['swoole']['log_file']) && self::$config['server']['log']['path']) {
self::$config['swoole']['log_file'] = str_replace('$type', 'swoole', self::$config['server']['log']['path']);
}
# 无集群模式
if (!isset(self::$config['clusters']['mode']) || !self::$config['clusters']['mode']) {
self::$config['clusters']['mode'] = 'none';
}
switch (self::$config['clusters']['mode']) {
case 'simple':
case 'task':
self::$clustersType = 1;
break;
case 'advanced':
self::$clustersType = 2;
break;
}
# 集群服务器
if (self::$clustersType > 0) {
if (!isset(self::$config['clusters']['register']) || !is_array(self::$config['clusters']['register'])) {
self::warn('集群模式开启但是缺少 clusters.register 参数');
exit;
}
if (!isset(self::$config['clusters']['register']['ip'])) {
self::warn('集群模式开启但是缺少 clusters.register.ip 参数');
exit;
}
# 注册服务器端口
if (!isset(self::$config['clusters']['register']['port'])) {
self::$config['clusters']['register']['port'] = 1310;
}
# 集群间通讯端口
if (!isset(self::$config['clusters']['port'])) {
self::$config['clusters']['port'] = 1311;
}
# 高级模式下任务进程端口
if (self::$clustersType === 2 && !isset(self::$config['clusters']['task_port'])) {
self::$config['clusters']['task_port'] = 1312;
}
if (isset(Server::$config['clusters']['register']['key']) && Server::$config['clusters']['register']['key']) {
# 设置集群注册服务器密码
Register\RPC::$RPC_KEY = Server::$config['clusters']['register']['key'];
}
}
# 缓存目录
if (isset(self::$config['swoole']['task_tmpdir'])) {
if (!is_dir(self::$config['swoole']['task_tmpdir'])) {
if (self::$config['swoole']['task_tmpdir'] !== '/dev/shm/') {
self::warn('定义的 swoole.task_tmpdir 的目录 ' . self::$config['swoole']['task_tmpdir'] . ' 不存在, 已改到 /tmp/ 目录');
}
self::$config['swoole']['task_tmpdir'] = '/tmp/';
}
}
# 对象的命名空间
if (isset(self::$config['server']['namespace']) && self::$config['server']['namespace']) {
$ns = trim(self::$config['server']['namespace'], '\\');
if ($ns) {
self::$namespace = "\\{$ns}\\";
}
}
}