配置文件

在每个Main所在目录下的config/config.php配置文件,会在该Main被实例化时加载。

如果你不知道Main是什么,请看上一章:《开始一个新项目》

imi 还支持你在项目根目录下,建立一个.env文件,在里面设置运行环境配置。

配置文件结构

共有结构

  1. <?php
  2. return [
  3. // 加载子配置文件,避免`config.php`过于臃肿不便维护
  4. // 要注意这里的别名不可与configs同级的名字重复,否则会被覆盖
  5. 'configs' => [
  6. "别名1" => '配置文件路径1',
  7. "别名2" => '配置文件路径2',
  8. ……
  9. ],
  10. // bean扫描目录,指定命名空间
  11. 'beanScan' => [
  12. 'ImiDemo\WebSocketDemo\Listener',
  13. ],
  14. ];

项目配置文件

  1. return [
  2. // Swoole >= 4.1.0可用,不设置默认为true,开启一键协程化
  3. 'enableCoroutine' => true,
  4. // runtime目录设置,默认可不设置,为当前项目下的.runtime目录
  5. // 注意,多个项目不可设置为相同目录!
  6. 'runtimePath' => '/tmp/imidemo-runtime/',
  7. // 定义进程名规则
  8. 'process' => [
  9. 'master' => 'imi:master:{namespace}',
  10. 'manager' => 'imi:manager:{namespace}',
  11. 'worker' => 'imi:worker-{workerId}:{namespace}',
  12. 'taskWorker' => 'imi:taskWorker-{workerId}:{namespace}',
  13. 'process' => 'imi:process-{processName}:{namespace}',
  14. 'processPool' => 'imi:process-pool-{processPoolName}-{workerId}:{namespace}',
  15. 'tool' => 'imi:{toolName}/{toolOperation}:{namespace}',
  16. ],
  17. // 主服务器配置
  18. 'mainServer' => [
  19. // 指定服务器命名空间
  20. 'namespace' => 'ImiDemo\HttpDemo\MainServer',
  21. // 服务器类型,暂时仅支持Type::HTTP
  22. 'type' => Type::HTTP,
  23. // 监听的IP地址,可选
  24. 'host' => '0.0.0.0',
  25. // 监听的端口
  26. 'port' => 8080,
  27. // 参考 swoole mode,可选
  28. 'mode' => SWOOLE_BASE,
  29. // 参考 swoole sockType,可选
  30. 'sockType' => SWOOLE_SOCK_TCP,
  31. // 服务器配置,参数用法同\Swoole\Server->set($configs)
  32. 'configs' => [
  33. 'reactor_num' => 8,
  34. 'worker_num' => 8,
  35. 'task_worker_num' => 16,
  36. ],
  37. ],
  38. // 子服务器(端口监听)配置
  39. 'subServers' => [
  40. // 子服务器别名
  41. 'alias1' => [
  42. // 这里同主服务器配置
  43. ]
  44. ],
  45. ];

.env

.env 中的配置方式,和Config::set()写法类似,支持@app等写法。

如下,是设置连接池的uri例子:

  1. @app.pools.maindb.async.resource = "tcp://192.168.0.222/?username=root&password=root&database=db_test&timeout=60"

数组的支持:

  1. @app.a.0.id = 1
  2. @app.a.0.name = name1
  3. @app.a.1.id = 2
  4. @app.a.1.name = name2

同:

  1. [
  2. 'a' => [
  3. ['id'=>1, 'name'=>'name1'],
  4. ['id'=>2, 'name'=>'name2'],
  5. ]
  6. ]