Fresns 配合 Octane 和 Swoole,同样能让应用常驻内存,性能提升十倍以上
参考资料
Fresns 配合 Octane 和 Swoole,同样能让应用常驻内存,性能提升十倍以上
Fresns 配合 Octane 和 Swoole,同样能让应用常驻内存,性能提升十倍以上。它的优势在于 Swoole 生态成熟,有丰富的并发任务、定时器和高性能缓存等特性,适合需要利用这些底层能力的场景。
📦 安装与激活
以下操作需要在 Fresns 根目录的终端中执行。
1. 安装 Octane 包
composer require laravel/octane
2. 安装 Swoole 扩展
Swoole 是 PHP 扩展,需要先通过 PECL 安装:
pecl install swoole
安装完成后,在 php.ini 中添加 extension=swoole.so 并重启 PHP-FPM。
3. 安装 Octane 的 Swoole 服务
php artisan octane:install --server=swoole
4. 启动服务
php artisan octane:start --server=swoole
默认监听 127.0.0.1:8000。
⚙️ 启动参数说明
octane:start 命令支持以下参数(与 FrankenPHP 大部分通用,但部分为 Swoole 特有):
| 参数 | 说明 | 默认值 |
|---|---|---|
--host | 绑定的 IP 地址 | 127.0.0.1 |
--port | 服务端口 | 8000 |
--workers | Worker 进程数量 | auto |
--task-workers | Swoole 特有,处理并发任务的 task worker 数量 | auto |
--max-requests | 重启前处理的最大请求数 | 500 |
--watch | 文件修改后自动重载(开发用) | 关闭 |
🔗 Nginx 反向代理配置
与 FrankenPHP 场景类似,需要修改 Nginx 的 URL 重写规则,将请求反向代理至 Octane 服务:
location /index.php {
try_files /not_exists @octane;
}
location / {
try_files $uri $uri/ @octane;
}
location @octane {
set $suffix "";
if ($uri = /index.php) {
set $suffix ?$query_string;
}
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Scheme $scheme;
proxy_set_header SERVER_PORT $server_port;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_pass http://127.0.0.1:8000$suffix;
}注意:如果使用 Docker 部署,proxy_set_header Host 需改为 $host:$server_port,否则 Laravel 可能丢失端口信息,导致资源 URL 错误 。
🔄 进程守护(必须)
Octane 必须加入进程守护,否则终端关闭后服务就会中断。宝塔面板中可参考以下配置:
启动用户:
www运行目录:Fresns 主程序根目录
启动命令:
php artisan octane:start --server=swoole --host=127.0.0.1 --port=8000
💡 Swoole 特有功能
Swoole 相比 FrankenPHP,多了一些底层能力,但Fresns 主程序本身通常不会直接使用,主要是给插件开发者准备的:
并发任务:使用 Octane::concurrently() 可以同时执行多个独立任务,利用 Swoole 的 task worker 在独立进程中运行,适合同时发起多个 API 请求或数据库查询的场景 。
Ticks 定时器:使用 Octane::tick() 可以注册每 N 秒执行一次的回调,适合周期性数据刷新或心跳检测 。
Octane 缓存:Cache::store('octane') 提供基于 Swoole Table 的进程间共享缓存,读写速度可达每秒 200 万次,但服务器重启后数据会丢失 。
⚠️ 注意事项
文件上传限制:Swoole 默认的 package_max_length 是 2MB,超过这个大小的文件上传会失败。如果 Fresns 需要上传较大的附件,需要在 config/octane.php 中调整 :
'swoole' => [ 'options' => [ 'package_max_length' => 10 * 1024 * 1024, // 10 MB ], ],
内存泄漏风险:Octane 常驻内存意味着静态变量、单例中注入的 Request 或 Container 都会在请求间残留。如果某个插件在静态数组中累积数据,内存会持续增长直到耗尽 。开发插件时需特别注意避免这类模式。
HTTPS 链接修正:如果站点启用了 HTTPS,需要在 .env 中添加 OCTANE_HTTPS=true,否则 Octane 生成的链接会以 http:// 开头。
时间:2026-10-01 16:50:27
来源:https://fresns.ciilii.com/
