MixPHP V3 開發流程體驗 Swoole, Workerman, FPM, CLI-Server 多種執行模式介紹

onanying發表於2021-08-11

MixPHP V3 釋出後,由於本身支援超多的執行模式,使用者可能無從下手,這裡先大體介紹一下:

  • CLI-Server: 適合本機開發,零擴充套件依賴,Windows/MacOS 等全平臺支援
  • PHP-FPM: 適合共享開發環境部署,同時適合 admin 等管理後臺專案
  • Swoole, Workerman: 適合線上部署,根據需要選擇其一即可

Swoole 的多種模式:

  • Swoole 多程式同步: 適合需要使用那些協程不支援的第三方庫的專案,和 Workerman 一致
  • Swoole 多程式協程: 適合專注 mysql + redis 需要超高 io 效能的專案
  • Swoole 單程式協程: 單程式協程就是 V2.2 版本那種 golang 風格協程,適合開發 websocket

幾乎支援 PHP 流行的全部執行模式,並且以上執行模式程式碼是無縫切換的,真正做到效率與效能並存。

請幫忙 Star 一下:

首先建立一個骨架

我們以開發一個 API 專案為例,開啟 MixPHP 的 開發文件 裡面有 cli api web websocket grpc 專案的開發教程,V3 開始倉庫底下的 README 就是開發文件,如果有不明白的可以加我們的 官方QQ群 參與討論。

  • 首先建立一個骨架

如果提示缺少 redis 等擴充套件支援,可以使用 --ignore-platform-reqs 暫時忽略依賴檢查

composer create-project --prefer-dist --ignore-platform-reqs mix/api-skeleton api

安裝後目錄結構如下:

  • bin 目錄是全部入口檔案,不同檔案對應的不同驅動模式
  • routes 是路由配置檔案
  • public/index.php 是 FPM, CLI-Server 兩種模式的入口檔案
  • shell/server.sh 是部署是管理程式 start|stop|restart
├── README.md
├── bin
│   ├── cli.php
│   ├── swoole.php
│   ├── swooleco.php
│   └── workerman.php
├── composer.json
├── composer.lock
├── conf
│   └── config.json
├── public
│   └── index.php
├── routes
│   └── index.php
├── runtime
├── shell
│   └── server.sh
├── src
│   ├── Command
│   ├── Container
│   ├── Controller
│   ├── Error.php
│   ├── Middleware
│   ├── Vega.php
│   └── functions.php
└── vendor

使用 CLI-Server 零擴充套件依賴模式本機開發

首先我們檢視一下 composer.json,與其他框架不同的是我們推薦在本機開發階段使用 composer run-script 啟動程式,可以和 PhpStorm 的除錯功能完美配合。

  • 這裡定義了每個執行模式的命令入口檔案
  • composer run-script --timeout=0 cliserver:start 就可以啟動命令
  "scripts": {
    "cliserver:start": "php -S localhost:8000 public/index.php",
    "swoole:start": "php bin/swoole.php",
    "swooleco:start": "php bin/swooleco.php",
    "workerman:start": "php bin/workerman.php start",
    "cli:clearcache": "php bin/cli.php clearcache"
  }

由於現在是本機開發,我們使用 CLI-Server 模式啟動,零擴充套件依賴,無需 pcntl, event, swoole 這些擴充套件,自帶熱更新。

% composer run-script --timeout=0 cliserver:start
> php -S localhost:8000 public/index.php
PHP 7.3.24-(to be removed in future macOS) Development Server started at Tue Aug 10 17:00:55 2021
Listening on http://localhost:8000
Document root is /Users/***/mix/examples/api-skeleton
Press Ctrl-C to quit.

測試一下預設的路由

% curl http://127.0.0.1:8000/hello
hello, world!

接下來就可以根據文件:

使用 PHP-FPM 部署共享開發環境

熱更新是剛性需求,所以共享開發環境我們直接採用 PHP-FPM 部署,和 Laravel、ThinkPHP 部署方法完全一致,將 public/index.phpnginx 配置 rewrite 重寫即可。

server {
    server_name www.domain.com;
    listen 80;
    root /data/project/public;
    index index.html index.php;

    location / {
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /index.php/$1 last;
        }
    }

    location ~ ^(.+\.php)(.*)$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

使用 Swoole 多程式協程模式線上部署

Swoole、Workerman 你可以隨意選擇,這裡我們採用 Swoole 舉例。

  • 首先安裝 Swoole 擴充套件
  • 修改 shell/server.sh 指令碼中的絕對路徑和引數

這裡我們選擇的 Swoole 多程式協程模式,因此入口檔案為 bin/swoole.php,其他模式參考 composer.json

php=/usr/local/bin/php
file=/data/project/bin/swoole.php
cmd=start
numprocs=1

啟動管理

sh /data/project/shell/server.sh start
sh /data/project/shell/server.sh stop
sh /data/project/shell/server.sh restart

接下來將啟動命令加入 crontab 防止程式異常中斷

*/1 * * * * sh /data/project/shell/server.sh start > /tmp/server.sh.log 2>&1 &

當修改程式碼時,使用 restart 讓程式碼生效

sh /data/project/shell/server.sh restart
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章