PHP每次的每次請求結束, 都會釋放掉執行中建立的所有資源。這樣有一個很大的好處:PHP程序員基本不用費力去考慮資源釋放的問題,諸如內存,IO句柄,數據庫連接等,請求結束時PHP將全部釋放。PHP程序員幾乎不用關心內存釋放的問題,也很難寫出內存泄露的程序。這讓PHP變得更加簡單容易上手, 直抒心意。但是也帶來了一個壞處:PHP很難在請求間復用資源, 類似PHP框架這種耗時的工作, 每次請求都需要反復做——即使每次都在做同樣的事情。也正因為如此,在PHP發展過程中,關於是否使用框架的爭論也從未停止過。
Stone主要優化的就是這個問題。 在框架資源初始化結束后再開啟一個FastCGI服務,這樣, 新的請求過來是直接從資源初始化結束后的狀態開始,避免每次請求去做資源初始化的事情。所以, 本質上, Stone運行時是常駐內存的,它和PHP-FPM一樣,是一個FastCGI的實現,不同的是, FPM每次執行請求都需要重新初始化框架, Stone直接使用初始化的結果。
同樣,事情總是有好有壞。壞處是:PHP編程變得更難了, 你需要考慮內存的釋放,需要關心PHP如何使用內存。甚至, 你需要了解使用的框架,以免『不小心』寫出讓人『驚喜』的效果。同時, PHP的調試變得更難, 因為每次修改程序后需要重啟進程才能看到效果。事實上開發Stone時針對這方面做了不少工作。好處是:程序的性能得到極大的提高。 當然, 客觀上的一些利好因素是: PHP的內存回收已經相當穩定和高效, Swoole穩定性已經在相當多的項目中得到驗證,Laravel代碼質量相當高。
按照Laravel官方文檔安裝laravel,如果已經安裝可以跳過
composer安裝stone內核
composer require stone/kernel:dev-master
編輯config / app.php,添加Provider
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
// 省略很多行
/*
* Package Service Providers...
*/
Stone\StoneServiceProvider::class,
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
],
編輯app / Console / Kernel.php,添加新命令
protected $commands = [
\Stone\Console\Commands\StoneServer::class,
];
Stone的安裝已經完成,正常情況下stone:server的命令應該可以正常執行了
php ./artisan stone:server --help
Usage:
stone:server [options]
Options:
--debug
--start
--reload
--stop
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Help:
A FastCGI server bases on swoole and laravel
下面我們繼續,讓服務器運行起來,首先需要設置一些服務器的參數,我們需要新建一個config / stone.php
<?php
return [
'server' => [
'user' => 'www-data', //運行用戶,一般和php-fpm運行用戶相同
'group' => 'www-data', //運行組,同上
'domain' => '/var/run/stone-server-fpm.sock', // Unix域套接字地址,使用與nginx進程通信,推薦保持可用,如果系統不支持也可以是ip地址
'port' => 9101, // 端口
'handler' => 'App\Servers\Handler', //請求處理器,一個類名
'pid' => '/var/run/stone.pid', //進程文件
]
];
建立Handler,新建app / Servers / Handler.php
<?php namespace App\Servers;
use Stone\Contracts\RequestHandler;
use Response;
class Handler implements RequestHandler
{
public function process()
{
return Response::make('hello, stone server!');
}
public function onWorkerStart()
{
}
public function handleException($e)
{
}
}
啟動服務器,正常情況下會顯示一個ok
php artisan swoole:http stop
php artisan swoole:http start
sudo php artisan stone:server --stop
sudo php artisan stone:server --start
訂閱:
張貼留言 (Atom)
熱門文章
-
資深前端工程師面試指南:Nuxt 3 生命週期與 SSR、CSR、SSG 渲染策略 在資深前端工程師的面試中,Nuxt 3 是一個熱門話題,尤其是其生命週期以及伺服器端渲染 (SSR)、客戶端渲染 (CSR) 和靜態生成 (SSG) 的應用場景。這些議題不僅考驗對框架的理解...
-
資料庫設計與優化題庫(適用 MySQL / Laravel) 在現代 Web 應用開發中,資料庫設計與優化是資深後端工程師的核心技能,尤其在使用 MySQL 與 Laravel 框架時。本文將提供的題庫擴展為一篇技術文章,分為四大類別。每個問題不僅列出,還附上深入解析、程式...
-
🧠 Vue3 + Nuxt3 面試速答小抄(完整版) 這份速答小抄專為準備 Vue3 與 Nuxt3 面試的開發者設計,採用「方法論 → 案例 → 專業詞彙 → 結果/影響」結構,幫助你在 30 秒內精準展現專業深度,並針對 async 相關問題補充細節。每題都可濃縮為...
-
資深前端工程師面試指南:Vue 與 Nuxt 篇 資深前端工程師的面試不僅考驗 Vue 和 Nuxt 的基本語法,還深入探討架構設計、效能優化、SSR、SEO、安全性、測試與團隊協作等層面。本文將提供的問題列表擴展為一篇技術文章,分為六大類別。每個問題附上深入解析、程式碼範...
-
🧩 PHP/Laravel 資深工程師十大常見面試問題速答小抄(詳細版含演算法與底層原理) 以下是針對 PHP/Laravel 資深工程師面試的十大常見問題,答案經過優化,融入底層原理(如 CORS)、詳細技術細節、具體案例、量化成果與演算法問題,幫助你在面試中展現專業深...
-
🧭 AI Debug & 開發提示詞範本庫(Laravel 專用) 這份範本庫提供一系列標準化的提示詞,幫助 PHP/Laravel 開發者在 Debug、功能開發與進階應用中高效利用 AI 作為程式副駕駛。範本適用於 Laravel 10/11 與 PHP 8.x 環...
-
資深 PHP 後端面試追問應答手冊 這份手冊整理了資深 PHP 後端工程師面試中常見的追問問題與結構化回答,涵蓋 Debug、架構設計、效能優化、安全性、團隊合作與 DevOps 等面向。每個回答遵循 方法論 → 案例 → 專業詞彙 → 結果/影響 的公式,幫助你在面試中...
-
🚀 AI 提示詞最佳實踐:Vue3 / Nuxt3 開發與除錯指南 在現代前端開發中,AI 已成為提高效率的強大工具。然而,如何精準地向 AI 提問,是釋放其潛能的關鍵。這份指南將提供一系列針對 Vue3 和 Nuxt3 的提示詞範本,涵蓋從基礎除錯到進階功能開發,幫助你更...
-
資深 PHP 後端面試追問應答手冊 - Redis 應用篇 本篇為 「資深 PHP 後端面試追問應答手冊」 的補充,聚焦於 Redis 在 PHP(特別是 Laravel)中的進階應用。Redis 作為高效的記憶體資料庫,在快取、隊列、即時通信、會話管理和分散式鎖等場景...
-
非技術面試速答小抄:以 STAR 法則展現職場成熟度 在技術面試中,除了程式設計和系統設計題目外, 行為面試問題 同樣至關重要。這些問題能展現你的軟性技能、解決問題的能力以及團隊合作力。本小抄提供以 STAR 法則(情境 Situation → 任務 Task → 行動 A...
沒有留言:
張貼留言