## 對應的Config類
~~~
ESD\Core\Server\Config\ServerConfig
~~~
## 配置項
~~~
/**
* 服務器名稱
* @var string
*/
protected $name = "esd";
/**
* 根目錄
* @var string
*/
protected $rootDir;
/**
* reactor線程數,通過此參數來調節Reactor線程的數量,以充分利用多核
* @var int
*/
protected $reactorNum;
/**
* worker進程數,設置啟動的Worker進程數量
* @var int
*/
protected $workerNum;
/**
* 數據包分發策略。可以選擇7種類型,默認為2
* 1,輪循模式,收到會輪循分配給每一個Worker進程
* 2,固定模式,根據連接的文件描述符分配Worker。這樣可以保證同一個連接發來的數據只會被同一個Worker處理
* 3,搶占模式,主進程會根據Worker的忙閑狀態選擇投遞,只會投遞給處于閑置狀態的Worker
* 4,IP分配,根據客戶端IP進行取模hash,分配給一個固定的Worker進程。可以保證同一個來源IP的連接數據總會被分配到同一個Worker進程。算法為 ip2long(ClientIP) % worker_num
* 5,UID分配,需要用戶代碼中調用 Server->bind() 將一個連接綁定1個uid。然后底層根據UID的值分配到不同的Worker進程。算法為 UID % worker_num,如果需要使用字符串作為UID,可以使用crc32(UID_STRING)
* 7,stream模式,空閑的Worker會accept連接,并接受Reactor的新請求
* @var int
*/
protected $dispatchMode;
/**
* 最大連接
* @var int
*/
protected $maxConn;
/**
* @var string|null
*/
protected $proxyServerClass = null;
/**
* 守護進程化 daemonize => 1,加入此參數后,將轉入后臺作為守護進程運行
* @var bool
*/
protected $daemonize;
/**
* 設置異步重啟開關。設置為true時,將啟用異步安全重啟特性,Worker進程會等待異步事件完成后再退出
* @var bool
*/
protected $reloadAsync;
/**
* Worker進程收到停止服務通知后最大等待時間,默認為30秒
* @var int
*/
protected $maxWaitTime;
/**
* CPU親和設置 open_cpu_affinity => 1 ,啟用CPU親和設置
* 在多核的硬件平臺中,啟用此特性會將swoole的reactor線程/worker進程綁定到固定的一個核上。可以避免進程/線程的運行時在多個核之間互相切換,提高CPU Cache的命中率。
* @var bool
*/
protected $openCpuAffinity;
/**
* 接受一個數組作為參數,array(0, 1) 表示不使用CPU0,CPU1,專門空出來處理網絡中斷。
* @var array
*/
protected $cpuAffinityIgnore;
/**
* log_file => '/data/log/swoole.log', 指定swoole錯誤日志文件。在swoole運行期發生的異常信息會記錄到這個文件中。默認會打印到屏幕。
* @var string
*/
protected $logFile;
/**
* 設置Server錯誤日志打印的等級,范圍是0-5。低于log_level設置的日志信息不會拋出。
* 0 => SWOOLE_LOG_DEBUG
* 1 => SWOOLE_LOG_TRACE
* 2 => SWOOLE_LOG_INFO
* 3 => SWOOLE_LOG_NOTICE
* 4 => SWOOLE_LOG_WARNING
* 5 => SWOOLE_LOG_ERROR
* SWOOLE_LOG_DEBUG和SWOOLE_LOG_TRACE僅在編譯為--enable-debug-log和--enable-trace-log版本時可用
* 默認為SWOOLE_LOG_DEBUG也就是所有級別都打印
* @var string
*/
protected $logLevel;
/**
* 心跳檢測機制 每隔多少秒檢測一次,單位秒,Swoole會輪詢所有TCP連接,將超過心跳時間的連接關閉掉
* @var int
*/
protected $heartbeatCheckInterval;
/**
* 心跳檢測機制 TCP連接的最大閑置時間,單位s , 如果某fd最后一次發包距離現在的時間超過heartbeat_idle_time會把這個連接關閉。
* @var int
*/
protected $heartbeatIdleTime;
/**
* 設置Worker/TaskWorker子進程的所屬用戶。
* 服務器如果需要監聽1024以下的端口,必須有root權限。
* 但程序運行在root用戶下,代碼中一旦有漏洞,攻擊者就可以以root的方式執行遠程指令,風險很大。
* 配置了user項之后,可以讓主進程運行在root權限下,子進程運行在普通用戶權限下。
* @var string
*/
protected $user;
/**
* 設置worker子進程的進程用戶組。與user配置相同,此配置是修改進程所屬用戶組,提升服務器程序的安全性。
* @var string
*/
protected $group;
/**
* 重定向Worker進程的文件系統根目錄。此設置可以使進程對文件系統的讀寫與實際的操作系統文件系統隔離。提升安全性。
* @var string
*/
protected $chroot;
/**
* 在Server啟動時自動將master進程的PID寫入到文件,在Server關閉時自動刪除PID文件。
* @var string
*/
protected $pidFile;
/**
* 配置發送輸出緩存區內存尺寸。
* 注意此函數不應當調整過大,避免擁塞的數據過多,導致吃光機器內存
* 開啟大量Worker進程時,將會占用worker_num * buffer_output_size字節的內存
* @var int
*/
protected $bufferOutputSize;
/**
* 數據發送緩存區
* 參數buffer_output_size用于設置單次最大發送長度。socket_buffer_size用于設置客戶端連接最大允許占用內存數量。
* 調整連接發送緩存區的大小。TCP通信有擁塞控制機制,服務器向客戶端發送大量數據時,并不能立即發出。這時發送的數據會存放在服務器端的內存緩存區內。此參數可以調整內存緩存區的大小。
* 如果發送數據過多,客戶端阻塞,數據占滿緩存區后Server會報如下錯誤信息:swFactoryProcess_finish: send failed, session#1 output buffer has been overflowed.
* 發送緩沖區塞滿導致send失敗,只會影響當前的客戶端,其他客戶端不受影響
* 服務器有大量TCP連接時,最差的情況下將會占用serv->max_connection * socket_buffer_size字節的內存
* @var int
*/
protected $socketBufferSize;
/**
* 設置當前工作進程最大協程數量。超過max_coroutine底層將無法創建新的協程,底層會拋出錯誤,并直接關閉連接。
* @var int
*/
protected $maxCoroutine;
/**
* 設置上傳文件的臨時目錄。
* @var string
*/
protected $uploadTmpDir;
/**
* 設置POST消息解析開關,選項為true時自動將Content-Type為x-www-form-urlencoded的請求包體解析到POST數組。設置為false時將關閉POST解析。
* @var bool
*/
protected $httpParsePost = true;
/**
* 配置靜態文件根目錄,與$enableStaticHandler配合使用。
* @var string
*/
protected $documentRoot;
/**
* $enableStaticHandler為true后,底層收到Http請求會先判斷document_root路徑下是否存在此文件,如果存在會直接發送文件內容給客戶端,不再觸發onRequest回調。
* @var bool
*/
protected $enableStaticHandler = false;
/**
* 啟用壓縮。默認為開啟。
* @var bool
*/
protected $httpCompression = true;
/**
* 設置WebSocket子協議。設置后握手響應的Http頭會增加Sec-WebSocket-Protocol: {$websocket_subprotocol}。具體使用方法請參考WebSocket協議相關RFC文檔。
* @var string
*/
protected $websocketSubprotocol;
/**
* 啟用websocket協議中關閉幀(opcode為0x08的幀)在onMessage回調中接收,默認為false
* 開啟后,可在WebSocketServer中的onMessage回調中接收到客戶端或服務端發送的關閉幀,開發者可自行對其進行處理。
* @var bool
*/
protected $openWebsocketCloseFrame = false;
/**
* 默認為debug模式,代表重啟緩存無效
* @var bool
*/
protected $debug = true;
/**
* Banner
* @var string
*/
protected $banner = "
________ ______ ______
|_ __ | .' ____ \ |_ _ `.
| |_ \_| | (___ \_| | | `. \
| _| _ _.____`. | | | |
_| |__/ | | \____) | _| |_.' /
|________| \______.' |______.'
";
~~~
## 例子
``` yaml
esd:
server:
name: demo
http_parse_post: true
http_compression: true
debug: true
```
- 前言
- 捐贈ESD項目
- 使用篇-通用
- 環境
- 安裝
- 規范
- 壓力測試
- 配置
- 如何設置YML配置
- server配置
- 端口配置
- 項目結構
- 事件派發
- 日志
- 注解
- DI容器
- 自定義進程
- 并發及協程池
- Console插件
- Scheduled插件
- Redis插件
- AOP插件
- Saber插件
- Mysql插件
- mysql事務
- Actuator插件
- Whoops插件
- Cache插件
- PHPUnit插件
- Security插件
- Session插件
- EasyRoute插件
- http路由
- ProcessRpc插件
- AutoReload插件
- AnnotationsScan插件
- Tracing-plugin插件
- MQTT插件
- Pack插件
- AMQP插件
- Validate插件
- Uid插件
- Topic插件
- Blade插件
- CsvReader插件
- hashed-wheel-timer-plugin插件
- 使用篇-HTTP
- 路由
- 靜態文件
- 路由定義
- 修飾方法
- 路由分組
- 資源路由
- 端口作用域
- 異常處理
- 跨域請求
- 路由緩存
- 控制器
- 控制器初始化
- 前置操作
- 跳轉和重定向
- 異常處理
- 請求
- 請求對象
- 請求信息
- request消息
- response消息
- stream消息
- url接口
- 驗證器
- 內置驗證器
- 內置過濾器
- 使用篇-WS
- 如何使用
- 路由
- 使用篇-TCP
- 插件篇-PluginSystem
- 微服務篇-ESDCloud
- CircuitBreaker插件
- SaberCloud插件
- 分布式鏈路追蹤系統
- Consul插件