配置文件

EasySwoole框架提供了非常灵活自由的全局配置功能,配置文件采用PHP返回数组方式定义,对于一些简单的应用,无需修改任何配置,对于复杂的要求,还可以自行扩展自己独立的配置文件和进行动态配置

默认配置文件

框架安装完成后系统默认的全局配置文件是项目根目录下的 Config.php 文件,该文件的内容如下

  1. <?php
  2. return [
  3. 'SERVER_NAME' => "EasySwoole", // 2.1.1 新增
  4. 'MAIN_SERVER' => [
  5. 'HOST' => '0.0.0.0',
  6. 'PORT' => 9501,
  7. 'SERVER_TYPE' => \EasySwoole\Core\Swoole\ServerManager::TYPE_WEB_SERVER,
  8. 'SOCK_TYPE' => SWOOLE_TCP, // 该配置项当为SERVER_TYPE值为TYPE_SERVER时有效
  9. 'RUN_MODEL' => SWOOLE_PROCESS,
  10. 'SETTING' => [
  11. 'task_worker_num' => 8, // 异步任务进程
  12. 'task_max_request' => 10,
  13. 'max_request' => 5000, // 强烈建议设置此配置项
  14. 'worker_num' => 8
  15. ],
  16. ],
  17. 'DEBUG' => true,
  18. 'TEMP_DIR' => EASYSWOOLE_ROOT . '/Temp',
  19. 'LOG_DIR' => EASYSWOOLE_ROOT . '/Log',
  20. 'EASY_CACHE' => [
  21. 'PROCESS_NUM' => 1, // 若不希望开启,则设置为0
  22. 'PERSISTENT_TIME' => 0 // 如果需要定时数据落地,请设置对应的时间周期,单位为秒
  23. ],
  24. 'CLUSTER' => [
  25. 'enable' => false,
  26. 'token' => null,
  27. 'broadcastAddress' => ['255.255.255.255:9556'],
  28. 'listenAddress' => '0.0.0.0',
  29. 'listenPort' => '9556',
  30. 'broadcastTTL' => 5,
  31. 'nodeTimeout' => 10, // 2.1.1 新增
  32. 'nodeName' => 'easySwoole', // 2.1.1 新增
  33. 'nodeId' => null, // 2.1.1 新增
  34. // 'serviceTTL' => 10, // 2.1.1 已废弃
  35. // 'serverName' => 'easySwoole', // 2.1.1 已废弃
  36. // 'serverId' => null // 2.1.1 已废弃
  37. ]
  38. ];

各项目的配置含义如下

  • MAIN_SERVER - 默认Server配置
    • HOST - 默认Server监听的地址
    • PORT - 默认Server监听的端口
    • SERVER_TYPE - 默认Server的类型
    • SOCK_TYPE - 默认Server的Sock类型( 仅 SERVER_TYPE 配置为 TYPE_SERVER 时有效 )
    • RUN_MODEL - 默认Server的运行模式
    • SETTING - Swoole Server的运行配置( 完整配置可见Swoole文档
      • task_worker_num - 运行的 task_worker 进程数量
      • task_max_request - task_worker 完成该数量的请求后将退出,防止内存溢出
      • worker_num - 运行的 worker 进程数量
      • max_request - worker 完成该数量的请求后将退出,防止内存溢出
  • DEBUG - 是否开启调试模式
  • TEMP_DIR - 临时文件存放的目录
  • LOG_DIR - 日志文件存放的目录

配置操作类

配置操作类为 EasySwoole\Config 类,使用非常简单,见下面的代码例子,操作类还提供了 toArray 方法获取全部配置,load 方法重载全部配置,基于这两个方法,可以自己定制更多的高级操作

设置和获取配置项都支持点语法分隔,见下面获取配置的代码例子

  1. <?php
  2. use EasySwoole\Config;
  3. $instance = Config::getInstance();
  4. // 获取配置 按层级用点号分隔
  5. $instance->getConf('MAIN_SERVER.SETTING.task_worker_num');
  6. // 设置配置 按层级用点号分隔
  7. $instance->setConf('DATABASE.host', 'localhost');
  8. // 获取全部配置
  9. $conf = $instance->toArray();
  10. // 用一个数组覆盖当前配置项
  11. $conf['DATABASE'] = [
  12. 'host' => '127.0.0.1',
  13. 'port' => 13306
  14. ];
  15. $instance->load($conf);

需要注意的是 由于进程隔离的原因 在Server启动后,动态新增修改的配置项,只对执行操作的进程生效,如果需要全局共享配置需要自己进行扩展

添加用户配置项

每个应用都有自己的配置项,添加自己的配置项非常简单,其中一种方法是直接在配置文件的数组中添加即可,如下面的例子

  1. <?php
  2. return [
  3. 'MAIN_SERVER' => [
  4. 'HOST' => '0.0.0.0',
  5. 'PORT' => 9501,
  6. 'SERVER_TYPE' => \EasySwoole\Core\Swoole\ServerManager::TYPE_WEB_SERVER,
  7. 'SOCK_TYPE' => SWOOLE_TCP,
  8. 'RUN_MODEL' => SWOOLE_PROCESS,
  9. 'SETTING' => [
  10. 'task_worker_num' => 8,
  11. 'task_max_request' => 10,
  12. 'max_request' => 5000,
  13. 'worker_num' => 8
  14. ],
  15. ],
  16. 'DEBUG' => true,
  17. 'TEMP_DIR' => EASYSWOOLE_ROOT . '/Temp',
  18. 'LOG_DIR' => EASYSWOOLE_ROOT . '/Log',
  19. // 这里是自己添加的 Database 配置项
  20. 'DATABASE' => [
  21. 'host' => '127.0.0.1',
  22. 'port' => 3306,
  23. 'auto_close' => true
  24. ]
  25. ];

批量载入配置

有时候配置文件比较多,比如说数据库(databse)的配置和缓存(cache)的配置需要分开存放,easySwoole 虽然没有直接提供额外加载配置的目录,但是可以自己实现批量载入配置,这也是非常简单的

新建配置文件

以数据库配置为例,首先创建一个存放配置的文件夹,可以在任意位置,如在根目录创建Conf文件夹用于存放配置文件

在配置文件夹中新建一个配置文件database.php存放数据库配置,配置文件直接返回一个数组,如下面的样例

  1. return [
  2. 'host' => '127.0.0.1',
  3. 'password' => '123456',
  4. 'dbname' => 'easyswoole'
  5. ];

自动加载配置

在项目的全局事件文件EasySwooleEvent中参照下面的例子添加代码,完成自动加载

  1. <?php
  2. namespace EasySwoole;
  3. use \EasySwoole\Core\AbstractInterface\EventInterface;
  4. use EasySwoole\Core\Utility\File;
  5. Class EasySwooleEvent implements EventInterface
  6. {
  7. public static function frameInitialize(): void
  8. {
  9. date_default_timezone_set('Asia/Shanghai');
  10. // 载入项目 Conf 文件夹中所有的配置文件
  11. $this->loadConf(EASYSWOOLE_ROOT . '/Conf');
  12. }
  13. function loadConf($ConfPath)
  14. {
  15. $Conf = Config::getInstance();
  16. $files = File::scanDir($ConfPath);
  17. foreach ($files as $file) {
  18. $data = require_once $file;
  19. $Conf->setConf(strtolower(basename($file, '.php')), (array)$data);
  20. }
  21. }
  22. }