配置文件
在每个Main所在目录下的config/config.php配置文件,会在该Main被实例化时加载。
如果你不知道Main是什么,请看上一章:《开始一个新项目》
imi 还支持你在项目根目录下,建立一个.env文件,在里面设置运行环境配置。
配置文件结构
共有结构
<?php
return [
// 加载子配置文件,避免`config.php`过于臃肿不便维护
// 要注意这里的别名不可与configs同级的名字重复,否则会被覆盖
'configs' => [
"别名1" => '配置文件路径1',
"别名2" => '配置文件路径2',
……
],
// bean扫描目录,指定命名空间
'beanScan' => [
'ImiDemo\WebSocketDemo\Listener',
],
];项目配置文件
return [
// 忽略扫描的命名空间
'ignoreNamespace' => [
'Imi\Test\Component\Annotation\A\*', // 忽略扫描该命名空间下所有类
'Imi\Test\Component\Annotation\B\TestB',// 忽略该类
],
// Swoole >= 4.1.0可用,不设置默认为true,开启一键协程化
'enableCoroutine' => true,
// runtime目录设置,默认可不设置,为当前项目下的.runtime目录
// 注意,多个项目不可设置为相同目录!
'runtimePath' => '/tmp/imidemo-runtime/',
// 定义进程名规则
'process' => [
'master' => 'imi:master:{namespace}',
'manager' => 'imi:manager:{namespace}',
'worker' => 'imi:worker-{workerId}:{namespace}',
'taskWorker' => 'imi:taskWorker-{workerId}:{namespace}',
'process' => 'imi:process-{processName}:{namespace}',
'processPool' => 'imi:process-pool-{processPoolName}-{workerId}:{namespace}',
'tool' => 'imi:{toolName}/{toolOperation}:{namespace}',
],
'imi' => [
// 覆盖 imi 框架默认的 beanScan,可以禁用某些用不到的模块
'beanScan' => [
'Imi\Config',
'Imi\Bean',
'Imi\Aop',
'Imi\Annotation',
'Imi\Cache',
'Imi\Server',
'Imi\Log',
'Imi\Pool',
'Imi\Db',
'Imi\Redis',
'Imi\Listener',
'Imi\Model',
'Imi\Task',
'Imi\Tool',
'Imi\Process',
'Imi\HotUpdate',
'Imi\Validate',
'Imi\HttpValidate',
'Imi\Enum',
'Imi\Lock',
'Imi\Facade',
],
],
// 主服务器配置
'mainServer' => [
// 指定服务器命名空间
'namespace' => 'ImiDemo\HttpDemo\MainServer',
// 服务器类型(http/WebSocket/TcpServer/UdpServer)
'type' => \Imi\Server\Type::HTTP,
// 监听的IP地址,可选
'host' => '0.0.0.0',
// 监听的端口
'port' => 8080,
// 参考 swoole mode,可选
'mode' => SWOOLE_BASE,
// 参考 swoole sockType,可选
'sockType' => SWOOLE_SOCK_TCP,
// 服务器配置,参数用法同\Swoole\Server->set($configs)
'configs' => [
'reactor_num' => 8,
'worker_num' => 8,
'task_worker_num' => 16,
],
],
// 子服务器(端口监听)配置
'subServers' => [
// 子服务器别名
'alias1' => [
// 这里同主服务器配置
]
],
];.env
在 .env 中的配置方式,支持两种写法。
写法一:直接注入配置,和Config::set()写法类似,支持@app等写法。
写法二:传统方式,如设定一个ABC=123,在配置文件中:
return [
'abc2' => getenv('ABC'), // PHP 内置
'abc1' => imiGetEnv('ABC', 'default'), // imi 框架封装,支持第二个参数为默认值
];如下,是设置连接池的uri例子:
@app.pools.maindb.async.resource = "tcp://192.168.0.222/?username=root&password=root&database=db_test&timeout=60"数组的支持:
@app.a.0.id = 1
@app.a.0.name = name1
@app.a.1.id = 2
@app.a.1.name = name2同:
[
'a' => [
['id'=>1, 'name'=>'name1'],
['id'=>2, 'name'=>'name2'],
]
]