>[danger] 該服務依賴 Swoole 擴展,Windows下無法執行。
## `mix-httpd` 服務器
官方開發的 HTTP 服務器,用于執行 "HTTP 服務",基于 Swoole 擴展的 `swoole_http_server`,擁有比 Apache/PHP-FPM 更高的性能。
>[info] mix-httpd 其實就是一個使用 MixPHP 開發的一個控制臺程序。
## 啟動
啟動服務器:
~~~
php mix-httpd start -c ../applications/http/config/httpd.php
~~~
以上命令的各部分拆解如下:
- `mix-httpd` 為入口文件。
- `start` 為命令。
- `-c ../applications/http/config/httpd.php` 服務器使用的配置文件,必填
## 配置文件
每個服務器都有一個單獨的配置文件:
[>> 到 GitHub 查看配置文件 <<](https://github.com/mix-php/mix/blob/v2/applications/http/config/httpd.php)
## 命令管理
服務器全部命令如下:
- `start `: 啟動服務器。
- `stop` : 停止服務器。
- `restart` : 重啟服務器。
- `reload` : 重啟所有工作進程,用于刷新代碼。
- `status` : 查看服務器狀態。
`start` 命令的參數:
- -d : 后臺運行
為了方便錯誤調試,不建議在開發階段使用該參數,因為終端會打印執行錯誤信息,避免頻繁到日志文件查看錯誤的煩惱。
- -u : 代碼熱更新
開發階段使用,需關閉 PHP 的 OPcache,該參數會使 Worker 進程只處理一次請求就銷毀,所以:**1. 不要在生產環境中使用 2. 會嚴重影響 ab 測試結果**
## 運行模式
服務器可選擇以下模式:
>[info] 理論上只要關閉服務器的 enable_coroutine 配置,不使用協程或異步客戶端,就是常駐同步模式。
- 常駐同步模式 (默認):
> 常駐內存帶來傳統框架無法比擬的高性能,同時對團隊技術要求不會太高,對 Composer 和其他三方庫兼容性高。
修改 `applications/http/config/httpd.php` 文件的以下配置項開啟該模式:
```
// 配置文件
'config_file' => __DIR__ . '/main_permanent.php',
// 開啟協程
'enable_coroutine' => false,
```
- 常駐協程模式:
> 除了具有常駐內存的優勢,協程帶來的并行優勢讓總體并發性能提升N倍,適合技術能力較強的團隊使用。
修改 `applications/http/config/httpd.php` 文件的以下配置項開啟該模式:
```
// 配置文件
'config_file' => __DIR__ . '/main_coroutine.php',
// 開啟協程
'enable_coroutine' => true,
```
## 事件鉤子
>[info] mix-http-server >= 2.0.2 支持
通過事件鉤子能在服務器的事件中執行一些代碼,比如:在 Worker 進程啟動前的 hook_worker_start 中清理 opcache 緩存,功能與 [Swoole 事件回調函數](https://wiki.swoole.com/wiki/page/41.html) 一致。
```
applications/http/config/httpd.php
```
~~~
// 運行參數:https://wiki.swoole.com/wiki/page/274.html
'setting' => [
// 主進程啟動事件回調
'hook_start' => function (\Swoole\Http\Server $server) {
},
// 主進程停止事件回調
'hook_shutdown' => function (\Swoole\Http\Server $server) {
},
// 管理進程啟動事件回調
'hook_manager_start' => function (\Swoole\Http\Server $server) {
},
// 工作進程錯誤事件
'hook_worker_error' => function (\Swoole\Http\Server $server, int $workerId, int $workerPid, int $exitCode, int $signal) {
},
// 管理進程停止事件回調
'hook_manager_stop' => function (\Swoole\Http\Server $server) {
},
// 工作進程啟動事件回調
'hook_worker_start' => function (\Swoole\Http\Server $server) {
},
// 工作進程停止事件回調
'hook_worker_stop' => function (\Swoole\Http\Server $server) {
},
// 工作進程退出事件回調
'hook_worker_exit' => function (\Swoole\Http\Server $server, int $workerId) {
},
// 請求成功回調
'hook_request_success' => function (\Swoole\Http\Server $server, \Swoole\Http\Request $request) {
},
// 請求錯誤回調
'hook_request_error' => function (\Swoole\Http\Server $server, \Swoole\Http\Request $request) {
},
],
~~~
## 自動重啟 (僅限開發階段使用)
為了提升開發效率,我們提供了 [https://github.com/mix-php/mix-inotifycmd](https://github.com/mix-php/mix-inotifycmd) 工具,能監控文件系統變化,通過設置的命令自動重啟服務器,可用于修改代碼后自動重啟各種 Swoole 常駐服務器 (僅限開發階段使用)
- 歡迎使用 MixPHP
- 安裝說明
- 全量安裝
- Phar 命令行
- 入門須知
- 增改應用
- 命名空間
- 自動加載
- 入口文件
- 配置文件
- 服務開發
- 核心基礎
- Bean
- Component
- Application
- 命令行
- 簡介
- 命令行開發常識
- 命令行開發
- 創建命令
- 命令參數
- 打印與顏色
- 控制臺程序
- 守護程序
- HTTP 服務
- 簡介
- 服務器
- 路由
- 請求
- 響應
- 控制器
- 視圖
- Auth
- Session
- 文件上傳
- 其他組件
- 分頁
- 驗證碼
- 圖片處理
- 客戶端
- GuzzleHttp
- 雜項
- Apache/PHP-FPM部署
- 調試與錯誤
- 安全建議
- WebSocket 服務
- 簡介
- 服務器
- 注冊器
- 連接
- 客戶端
- 測試
- 雜項
- nginx代理
- 60s無消息斷線
- TCP 服務
- 簡介
- 服務器
- 客戶端
- 測試
- UDP 服務
- 簡介
- 服務器
- 客戶端
- 測試
- 協程
- 簡介
- 開啟協程
- PHP Stream Hook
- xgo + Channel
- WaitGroup + xdefer
- 連接池
- 協程池
- 定時器
- 公共組件
- 中間件
- 驗證器
- 驗證器定義
- 驗證規則
- 靜態調用
- 模型
- 日志
- 緩存
- 數據庫
- Database
- QueryBuilder
- PDOConnection
- Persistent\PDOConnection
- Coroutine\PDOConnection
- MasterSlave\PDOConnection
- ExecuteListener
- Redis
- RedisConnection
- Persistent\RedisConnection
- Coroutine\RedisConnection
- ExecuteListener
- 常見問題
- 同一臺服務器部署多個服務
- 連接多個數據庫
- 如何設置跨域
- form-data 上傳文件失敗
- 開發工具
- 版本更新
- 不兼容改動
- 升級指南
- 文檔歷史