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