参考资料

  1. Fresns 的终端中清理缓存,需要根据具体的缓存类型来执行
  2. Fresns 的时区配置核心是在 .env 文件中设置 APP_TIMEZONE 参数
  3. Composer 换国内源是提升依赖下载速度最直接的方法
  4. Fresns 的软链接,核心是解决“本地存储的文件无法被公网访问”的问题
  5. OpenResty 本质上是一个集成了 Nginx 与 LuaJIT 的 Web 平台
  6. Fresns 的定时任务基于 Laravel 的 Task Scheduler 机制
  7. Fresns 的队列,它的核心是按需配置,并非安装必选项
  8. Fresns 对 Composer 的版本要求很明确:不低于 2.5

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
--workersWorker 进程数量auto
--task-workersSwoole 特有,处理并发任务的 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/