配置文件
EasySwoole
框架提供了非常靈活自由的全局配置功能,配置文件采用 PHP
返回?cái)?shù)組方式定義,對(duì)于一些簡(jiǎn)單的應(yīng)用,無需修改任何配置,對(duì)于復(fù)雜的要求,還可以自行擴(kuò)展自己獨(dú)立的配置文件和進(jìn)行動(dòng)態(tài)配置。
框架安裝完成后系統(tǒng)默認(rèn)的全局配置文件是項(xiàng)目根目錄下的 produce.php
、 dev.php
文件,(在 3.1.2
版本之前是 dev.env
、produce.env
),3.7.x
版本(最新版)支持在啟動(dòng) EasySwoole
框架時(shí)以指定的配置文件( dev.php
/ produce.php
)運(yùn)行,詳細(xì)啟動(dòng)命令請(qǐng)看 基本管理命令章節(jié)。
配置文件內(nèi)容如下:
<?php
return [
// 服務(wù)名稱
'SERVER_NAME' => "EasySwoole",
'MAIN_SERVER' => [
// 監(jiān)聽地址
'LISTEN_ADDRESS' => '0.0.0.0',
// 監(jiān)聽端口
'PORT' => 9501,
// 可選 EASYSWOOLE_SERVER,EASYSWOOLE_WEB_SERVER EASYSWOOLE_WEB_SOCKET_SERVER
'SERVER_TYPE' => EASYSWOOLE_WEB_SERVER,
// 可選 SWOOLE_TCP SWOOLE_TCP6 SWOOLE_UDP SWOOLE_UDP6 SWOOLE_UNIX_DGRAM SWOOLE_UNIX_STREAM
'SOCK_TYPE' => SWOOLE_TCP,
// 默認(rèn) Server 運(yùn)行模式
'RUN_MODEL' => SWOOLE_PROCESS,
// Swoole_Server 運(yùn)行配置( 完整配置可見[Swoole 文檔](http://swoole.easyswoole.com/ServerStart/Tcp/method.html) 的 mode 參數(shù) )
'SETTING' => [
// 運(yùn)行的 worker 進(jìn)程數(shù)量
'worker_num' => 8,
// 設(shè)置異步重啟開關(guān)。設(shè)置為 true 時(shí),將啟用異步安全重啟特性,Worker 進(jìn)程會(huì)等待異步事件完成后再退出。
'reload_async' => true,
// 開啟后自動(dòng)在 onTask 回調(diào)中創(chuàng)建協(xié)程
'task_enable_coroutine' => true,
'max_wait_time' => 3,
// (可選參數(shù))使用 http 上傳大文件時(shí)可以進(jìn)行配置
// 'package_max_length' => 100 * 1024 * 1024, // 即 100 M
// (可選參數(shù)) 允許處理靜態(tài)文件 html 等,詳細(xì)請(qǐng)看 http://swoole.easyswoole.com/ServerStart/Http/serverSetting.html
// 'document_root' => '/easyswoole/public',
// 'enable_static_handler' => true,
],
// 設(shè)置 EasySwoole 框架獨(dú)立實(shí)現(xiàn)的 Task 任務(wù)組件的配置
'TASK'=>[
'workerNum' => 4,
'maxRunningNum' => 128,
'timeout' => 15
]
],
// 臨時(shí)文件存放的目錄
'TEMP_DIR' => null,
### 日志相關(guān)配置 (目前最新)EasySwoole 3.4.4 及以后版本支持
"LOG" => [
// 設(shè)置記錄日志文件時(shí)日志文件存放目錄
'dir' => null,
// 設(shè)置記錄日志時(shí)的日志最低等級(jí),低于此等級(jí)的日志不進(jìn)行記錄和顯示
'level' => \EasySwoole\Log\LoggerInterface::LOG_LEVEL_DEBUG,
// 設(shè)置日志處理器 `handler` (handler)
'handler' => null,
// 設(shè)置開啟控制臺(tái)日志記錄到日志文件
'logConsole' => true,
// 設(shè)置開啟在控制臺(tái)顯示日志
'displayConsole'=>true,
// 設(shè)置打印日志時(shí)忽略哪些分類的日志不進(jìn)行記錄
'ignoreCategory' => []
],
### 日志相關(guān)配置 EasySwoole 3.4.3 版本支持
// "LOG" => [
// 'dir' => null,
// 'level' => \EasySwoole\Log\LoggerInterface::LOG_LEVEL_DEBUG,
// 'handler' => null,
// ],
### 日志相關(guān)配置 EasySwoole 3.4.3 之前支持
// 日志文件存放的目錄
// 'LOG_DIR' => null,
];
以上配置關(guān)于日志的相關(guān)配置的說明,詳細(xì)請(qǐng)看 日志 章節(jié)。
上述參數(shù)補(bǔ)充說明:
- MAIN_SERVER.SERVER_TYPE:
- EASYSWOOLE_WEB_SERVER: 表示框架主服務(wù)為
Http
服務(wù)(框架默認(rèn)提供的服務(wù)類型) - EASYSWOOLE_SERVER: 表示框架主服務(wù)為
Tcp
服務(wù) - EASYSWOOLE_WEB_SOCKET_SERVER: 表示框架主服務(wù)為
WebSocket
服務(wù)
- EASYSWOOLE_WEB_SERVER: 表示框架主服務(wù)為
EASYSWOOLE_SERVER、EASYSWOOLE_WEB_SOCKET_SERVER類型,都需要在 EasySwooleEvent.php
的 mainServerCreate
事件中自行設(shè)置回調(diào)( receive
或 message
),否則將出錯(cuò)。具體設(shè)置對(duì)應(yīng)的回調(diào)的方式請(qǐng)參考 Tcp 服務(wù)章節(jié) 和 WebSocket 服務(wù)章節(jié)。關(guān)于同時(shí)支持多個(gè)服務(wù)的使用也請(qǐng)查看 Tcp 服務(wù)章節(jié) 和 WebSocket 服務(wù)章節(jié)。
注意:目前框架 3.7.x
的配置驅(qū)動(dòng)默認(rèn)為 SplArray
,自定義配置驅(qū)動(dòng)可查看本文最后章節(jié)。
注意:EasySwoole 3.7.x
之前版本的配置驅(qū)動(dòng)使用的是 \Swoole\Table
,由于 swoole_table
的特殊特性,不適合存儲(chǔ)大量/大長(zhǎng)度的配置,如果是存儲(chǔ)支付秘鑰、簽名等大長(zhǎng)度字符串,建議使用類常量方法定義,而不是通過 dev.php
存儲(chǔ)。如果你必須用配置文件存儲(chǔ),請(qǐng)看本文下文的自定義 config
驅(qū)動(dòng)。
配置操作類
配置操作類為 \EasySwoole\EasySwoole\Config
類,使用方式非常簡(jiǎn)單,具體請(qǐng)看下面的代碼示例,操作類還提供了 load
方法重載全部配置,基于這個(gè)方法,可以自己定制更多的高級(jí)操作。
設(shè)置和獲取配置項(xiàng)都支持點(diǎn)語法分隔,具體請(qǐng)看下面獲取配置的代碼示例
<?php
$instance = \EasySwoole\EasySwoole\Config::getInstance();
// 獲取配置 按層級(jí)用點(diǎn)號(hào)分隔
$instance->getConf('MAIN_SERVER.SETTING.task_worker_num');
// 設(shè)置配置 按層級(jí)用點(diǎn)號(hào)分隔
$instance->setConf('DATABASE.host', 'localhost');
// 獲取全部配置
$conf = $instance->getConf();
// 用一個(gè)數(shù)組覆蓋當(dāng)前配置項(xiàng)
$conf['DATABASE'] = [
'host' => '127.0.0.1',
'port' => 13306
];
$instance->load($conf);
需要注意的是 由于進(jìn)程隔離的原因
,在 Server
啟動(dòng)后,動(dòng)態(tài)新增修改的配置項(xiàng),只對(duì)執(zhí)行操作的進(jìn)程生效,如果需要全局共享配置需要自己進(jìn)行擴(kuò)展
添加用戶配置項(xiàng)
每個(gè)用戶都有自己的配置項(xiàng),添加自己的配置項(xiàng)非常簡(jiǎn)單,其中一種方法是直接在配置文件中添加即可,如下面的例子:
下面示例中添加了自定義的 MySQL
和 Redis
配置。
<?php
return [
'SERVER_NAME' => "EasySwoole",
'MAIN_SERVER' => [
'LISTEN_ADDRESS' => '0.0.0.0',
'PORT' => 9501,
'SERVER_TYPE' => EASYSWOOLE_WEB_SERVER, // 可選為 EASYSWOOLE_SERVER EASYSWOOLE_WEB_SERVER EASYSWOOLE_WEB_SOCKET_SERVER
'SOCK_TYPE' => SWOOLE_TCP,
'RUN_MODEL' => SWOOLE_PROCESS,
'SETTING' => [
'worker_num' => 8,
'reload_async' => true,
'max_wait_time'=>3,
'document_root' => EASYSWOOLE_ROOT . '/Static',
'enable_static_handler' => true,
],
'TASK'=>[
'workerNum'=>0,
'maxRunningNum'=>128,
'timeout'=>15
]
],
'TEMP_DIR' => null,
'LOG_DIR' => null,
// 添加 MySQL 及對(duì)應(yīng)的連接池配置
/*################ MYSQL CONFIG ##################*/
'MYSQL' => [
'host' => '127.0.0.1', // 數(shù)據(jù)庫(kù)地址
'port' => 3306, // 數(shù)據(jù)庫(kù)端口
'user' => 'root', // 數(shù)據(jù)庫(kù)用戶名
'password' => 'root', // 數(shù)據(jù)庫(kù)用戶密碼
'timeout' => 45, // 數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間
'charset' => 'utf8', // 數(shù)據(jù)庫(kù)字符編碼
'database' => 'easyswoole', // 數(shù)據(jù)庫(kù)名
'autoPing' => 5, // 自動(dòng) ping 客戶端鏈接的間隔
'strict_type' => false, // 不開啟嚴(yán)格模式
'fetch_mode' => false,
'returnCollection' => false, // 設(shè)置返回結(jié)果為 數(shù)組
// 配置 數(shù)據(jù)庫(kù) 連接池配置,配置詳細(xì)說明請(qǐng)看連接池組件 http://www.zbjtqy.com/Components/Pool/introduction.html
'intervalCheckTime' => 15 * 1000, // 設(shè)置 連接池定時(shí)器執(zhí)行頻率
'maxIdleTime' => 10, // 設(shè)置 連接池對(duì)象最大閑置時(shí)間 (秒)
'maxObjectNum' => 20, // 設(shè)置 連接池最大數(shù)量
'minObjectNum' => 5, // 設(shè)置 連接池最小數(shù)量
'getObjectTimeout' => 3.0, // 設(shè)置 獲取連接池的超時(shí)時(shí)間
'loadAverageTime' => 0.001, // 設(shè)置 負(fù)載閾值
],
// 添加 Redis 及對(duì)應(yīng)的連接池配置
/*################ REDIS CONFIG ##################*/
'REDIS' => [
'host' => '127.0.0.1', // Redis 地址
'port' => '6379', // Redis 端口
'auth' => 'easyswoole', // Redis 密碼
'timeout' => 3.0, // Redis 操作超時(shí)時(shí)間
'reconnectTimes' => 3, // Redis 自動(dòng)重連次數(shù)
'db' => 0, // Redis 庫(kù)
'serialize' => \EasySwoole\Redis\Config\RedisConfig::SERIALIZE_NONE, // 序列化類型,默認(rèn)不序列化
'packageMaxLength' => 1024 * 1024 * 2, // 允許操作的最大數(shù)據(jù)
// 配置 Redis 連接池配置,配置詳細(xì)說明請(qǐng)看連接池組件 http://www.zbjtqy.com/Components/Pool/introduction.html
'intervalCheckTime' => 15 * 1000, // 設(shè)置 連接池定時(shí)器執(zhí)行頻率
'maxIdleTime' => 10, // 設(shè)置 連接池對(duì)象最大閑置時(shí)間 (秒)
'maxObjectNum' => 20, // 設(shè)置 連接池最大數(shù)量
'minObjectNum' => 5, // 設(shè)置 連接池最小數(shù)量
'getObjectTimeout' => 3.0, // 設(shè)置 獲取連接池的超時(shí)時(shí)間
'loadAverageTime' => 0.001, // 設(shè)置 負(fù)載閾值
],
];
生產(chǎn)與開發(fā)配置分離
在 php easyswoole.php server start
命令下,默認(rèn)為開發(fā)模式,加載 dev.php
(3.1.2 之前為 dev.env
)
運(yùn)行 php easyswoole.php server start -mode=produce
命令時(shí),為生產(chǎn)模式,加載 produce.php
(3.1.2 之前為 produce.env
)
舊版本 EasySwoole (3.4.x 以前的版本),在 php easyswoole.php start
命令下,默認(rèn)為開發(fā)模式,加載 dev.php
(3.1.2 之前為 dev.env
)。運(yùn)行 php easyswoole.php start produce
命令時(shí),為生產(chǎn)模式,加載 produce.php
(3.1.2 之前為 produce.env
)
DI 注入配置
EasySwoole 3.x
提供了幾個(gè) Di
參數(shù)配置,可自定義配置腳本錯(cuò)誤異常處理回調(diào)、控制器命名空間、最大解析層級(jí)等。
<?php
// 配置錯(cuò)誤處理回調(diào)
\EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::ERROR_HANDLER, function () {
});
// 配置腳本結(jié)束回調(diào)
\EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::SHUTDOWN_FUNCTION, function () {
});
// 配置控制器命名空間
\EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_CONTROLLER_NAMESPACE, 'App\\HttpController\\');
// 配置 HTTP 控制器最大解析層級(jí)
\EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_CONTROLLER_MAX_DEPTH, 5);
// 配置http控制器異常回調(diào)
\EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_EXCEPTION_HANDLER, function () {});
// HTTP 控制器對(duì)象池最大數(shù)量
\EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_CONTROLLER_POOL_MAX_NUM, 15);
自定義 Config 驅(qū)動(dòng)
EasySwoole
在 3.2.5
版本后,默認(rèn)配置驅(qū)動(dòng)存儲(chǔ)從 SplArray
改為了 swoole_table
,修改配置之后,所有進(jìn)程同時(shí)生效。在 3.4.x
版本后,由于特殊原因,默認(rèn)配置驅(qū)動(dòng)存儲(chǔ)又從 swoole_table
改為了 SplArray
,修改配置之后,僅在當(dāng)前進(jìn)程生效。所以在 3.2.5
~ 3.3.7
版本中,默認(rèn)配置驅(qū)動(dòng)存儲(chǔ)為 swoole_table
。
AbstractConfig
\EasySwoole\Config\AbstractConfig
抽象類提供了以下幾個(gè)方法,用于給其他 config
驅(qū)動(dòng)繼承:
-
isDev() 該方法在
3.4.x
版本中已移除,請(qǐng)用\EasySwoole\EasySwoole\Core::getInstance()->runMode() == 'dev'
判斷是否為開發(fā)環(huán)境。 (在3.4.x
之前版本可通過該方法獲得當(dāng)前運(yùn)行環(huán)境是否為開發(fā)環(huán)境) -
abstract function getConf($key = null); 獲取一個(gè)配置
-
abstract function setConf($key, $val): bool; 設(shè)置一個(gè)參數(shù)
-
abstract function load(array $array): bool; 重新加載配置項(xiàng)
-
abstract function merge(array $array): bool; 合并配置項(xiàng)
-
abstract function clear(): bool; 清除所有配置項(xiàng)
自定義配置存儲(chǔ)驅(qū)動(dòng)
在 EasySwoole
中,自帶了 SplArray
和 swoole_table
驅(qū)動(dòng)實(shí)現(xiàn),可自行查看源碼進(jìn)行深入了解。
目前最先版本默認(rèn)驅(qū)動(dòng)為 SplArray
。
如需要修改配置存儲(chǔ)驅(qū)動(dòng),配置步驟如下:
- 繼承
AbstractConfig
實(shí)現(xiàn)各個(gè)方法 - 在 Bootstrap 事件 事件中修改
config
驅(qū)動(dòng)(直接在bootstrap.php
文件中加入如下代碼即可)
<?php
\EasySwoole\EasySwoole\Config::getInstance(new \EasySwoole\Config\SplArrayConfig());
由于 bootstrap 事件
是由 EasySwoole
啟動(dòng)腳本執(zhí)行,當(dāng)你需要寫 cli
腳本需要初始化 EasySwoole
框架基礎(chǔ)組件時(shí),需要自行引入 bootstrap.php
文件。
動(dòng)態(tài)配置問題
由于 swoole
是多進(jìn)程的,如果使用 SplArray
方式存儲(chǔ),在單個(gè)進(jìn)程修改配置后,其他進(jìn)程將不會(huì)生效,使用swoole_table
方式的則會(huì)全部生效,需要特別注意。
在 EasySwoole 3.4.x
之前版本,框架采用 swoole_table
作為默認(rèn)配置驅(qū)動(dòng)存儲(chǔ)。所以當(dāng)你在控制器( worker
進(jìn)程)中修改某一項(xiàng)配置時(shí),由于進(jìn)程隔離,修改的配置不會(huì)在其他進(jìn)程生效,所以我們可以使用動(dòng)態(tài)配置: 動(dòng)態(tài)配置將配置數(shù)據(jù)存儲(chǔ)在 swoole_table
中,獲取/修改配置數(shù)據(jù)時(shí)是從 swoole_table
直接操作,所有進(jìn)程都可以使用。但是在目前最新版本中默認(rèn)配置驅(qū)動(dòng)存儲(chǔ)變成了 SplArray
,在單個(gè)進(jìn)程修改配置后,其他進(jìn)程將不會(huì)生效,需要特別注意。
其他
-
QQ 交流群
- VIP 群 579434607 (本群需要付費(fèi) 599 元)
- EasySwoole 官方一群 633921431(已滿)
- EasySwoole 官方二群 709134628(已滿)
- EasySwoole 官方三群 932625047(已滿)
- EasySwoole 官方四群 779897753(已滿)
- EasySwoole 官方五群 853946743(已滿)
- EasySwoole 官方六群 524475224(已滿)
- EasySwoole 官方七群 1016674948
-
商業(yè)支持:
- QQ 291323003
- EMAIL admin@fosuss.com
-
作者微信
-
捐贈(zèng) 您的捐贈(zèng)是對(duì)
EasySwoole
項(xiàng)目開發(fā)組最大的鼓勵(lì)和支持。我們會(huì)堅(jiān)持開發(fā)維護(hù)下去。 您的捐贈(zèng)將被用于:- 持續(xù)和深入地開發(fā)
- 文檔和社區(qū)的建設(shè)和維護(hù)
-
EasySwoole
的文檔使用EasySwoole 框架
提供服務(wù),采用MarkDown 格式
和自定義格式編寫,若您在使用過程中,發(fā)現(xiàn)文檔有需要糾正 / 補(bǔ)充的地方,請(qǐng)fork
項(xiàng)目的文檔倉(cāng)庫(kù),進(jìn)行修改補(bǔ)充,提交Pull Request
并聯(lián)系我們。