一、準備工作
1.安裝composer, 並設定映象
Packagist / Composer 中國全量映象 (pkg.xyz)
2.搜尋 spiral/roadrunner
時發現了laravel的版本
3.決定嘗試 spiral/roadrunner-laravel
, 翻閱了已釋出版本的依賴要求,
php ^7.3 || ^8.0 支援的最新版: v3.7.0
php ^7.4 || ^8.0 支援的最新版: v5.5.0
需要開啟php_socket.dll
擴充套件,如果 php -m 檢視擴充套件不存在,就手動加入
前提是:這個dll檔案在php的可執行目錄下/ext
下真實存在
二、開始實踐
說明:執行在windows環境,phpstudy搭建的整合環境,web伺服器為nginx, php ^7.3
新弄一個專案測試,安裝laravel 框架
利用已有的nginx伺服器,配置了虛擬域名 test.dy.com,並保證專案可使用。 然後關掉nginx服務。 (這一步可以不做呢。。。)
引入 spiral/roadrunner-laravel 包
composer require spiral/roadrunner-laravel "^3.7.0"
釋出配置檔案,執行
php artisan vendor:publish
, 選擇Spiral\RoadRunnerLaravel\ServiceProvider
對應的編號並輸入,會有2個檔案的改動,如下複製
.rr.yaml.dist
重新命名為.rr.yaml
下載 Roadrunner的可執行檔案
.\vendor\bin\rr get-binary
或者手動下載
github.com/spiral/roadrunner-binar...
RoadRunner是Go語言實現,最終編譯成二進位制檔案才可用。官方提供了各個版本已編譯好的可執行檔案。
這個.\vendor\bin\rr 用編輯器開啟 發現是php程式。使用RoadRunner作為web伺服器,首先要執行起來,就跟啟動apache/nginx伺服器一個道理。
5.1 如果下載不成功,提示如下
“無法提取這個檔案”,無法下載?無法解壓?
根據圖中的版本提示,在 vendor/spiral/roadrunner/bin/rr.php中找到了出處 ,
public static function getSignature(): string
{
return 'roadrunner-' . self::getVersion() . '-' . self::getOSType() . '-amd64';
}
public static function getBinaryDownloadUrl(): string
{
$ext = '.zip';
if (self::getOSType() == 'linux') {
$ext = '.tar.gz';
}
return 'https://github.com/spiral/roadrunner/releases/download/v'
. static::getVersion() . '/' . self::getSignature()
. $ext;
}
5.2 於是根據圖中提示的版本,在github找到原始碼的對應版本,然後在下方有已編譯好的各版本可下載。點選下載,解壓
roadrunner-1.9.1-windows-amd64.zip
解壓後得到的
rr.exe
檔案, 放到專案根目錄
下.修改
.rr.yaml
配置檔案,刪除一些配置保留必要的.
http:
address: 0.0.0.0:80
workers:
# linux版本
#command: "php ./vendor/bin/rr-worker start --relay-dsn unix:///var/run/rr-relay.sock"
#relay: "unix:///var/run/rr-relay.sock"
# windows版本
command: "php vendor/spiral/roadrunner-laravel/bin/rr-worker start pipes"
# connection method (pipes, tcp://:9000, unix://socket.unix). default "pipes"
relay: "pipes"
user: ""
pool:
numWorkers: 4
maxJobs: 0
allocateTimeout: 60
destroyTimeout: 60
static:
dir: "public"
forbid: [ ".php", ".htaccess" ]
request:
"Example-Request-Header": "Value"
response:
"X-Powered-By": "RoadRunner"
- 專案根目錄下,啟動服務
rr.exe serve -v -d -c ./.rr.yaml
三、測試
首先用框架安裝好後的預設路由測試,
Route::get('/', function () { return view('welcome'); });
修改檢視中的內容,在不重啟服務的前提下,資料發生更改。
welcome.blade.php 檢視中增加一個表單
<body class="antialiased"> <h1>post login 12</h1> <form method="post" action="/login"> @csrf 使用者名稱:<input type="text" name="username" value="lisi"/> 年齡:<input type="text" name="age" value="10"/> <button type="submit">提交</button> </form> </body>
修改路由檔案 route/web.php, 瀏覽器上提交後報錯
Route::post('/login', function (\Illuminate\Support\Facades\Request $request) { return $request->all(); });
於是修改了路由內容,使用
php artisan route:clear
清除了路由快取,發現依舊報錯Route::post('/login', function (\Illuminate\Support\Facades\Request $request) { return request()->input(); });
接著命令列 ctrl+c 斷開了服務,重新執行 命令
rr.exe serve -v -d -c ./.rr.yaml
, 於是正常了,得到了新的資料多次試驗後發現,是服務沒有重新載入檔案內容
如何保證修改後及時生效呢?
在.rr.yaml檔案中追加如下內容,用於自動重新整理,注意配置中的註釋內容。
reload:
interval: 1s
patterns: [ ".php" ]
services:
http:
# 配置的路由檔案重新載入,按需配置,不建議配置為""
dirs: [ "routes" ]
recursive: true
本作品採用《CC 協議》,轉載必須註明作者和本文連結