PHP Laravel Octane

wen PHP项目 2

Laravel Octane - 高性能应用引擎

什么是 Laravel Octane?

Laravel Octane 是 Laravel 官方提供的高性能应用服务器,它通过使用 SwooleRoadRunner 来显著提升应用性能。

PHP Laravel Octane

核心优势

🚀 性能提升

  • 内存常驻:应用启动一次,持续处理请求(传统 PHP-FPM 每次请求都要重新启动)
  • 请求处理速度:比传统方式快 5-100 倍
  • 并发处理:支持高并发场景

💡 主要特性

  1. 常驻内存

    • 应用状态在请求间共享
    • 减少重复初始化开销
  2. 异步任务处理

    // 不需要额外安装队列即可异步处理
    Octane::concurrently([
        fn() => processData(),
        fn() => sendEmail(),
        fn() => updateCache(),
    ]);
  3. 热重载

    # 无需重启服务即可更新代码
    php artisan octane:reload

安装与配置

安装依赖

composer require laravel/octane
php artisan octane:install

选择服务器(推荐 Swoole)

# 安装 Swoole 扩展
pecl install swoole
# 或者使用官方脚本
php artisan octane:install --server=swoole

启动 Octane

# 开发环境(带热重载)
php artisan octane:start --watch
# 生产环境
php artisan octane:start --host=127.0.0.1 --port=8000 --workers=4

配置优化

workers 配置(config/octane.php)

'workers' => 4,           // 进程数
'max_requests' => 1000,   // 进程处理请求数上限
'watch' => ['resources/views', 'app'],  // 热重载监视目录

内存泄漏防护

// 在服务提供者中使用 tick 回调
Octane::tick('cleanup', function () {
    DB::disconnect();  // 定期清理数据库连接
}, 60); // 每60秒执行

注意事项

⚠️ 需要避免的操作

  1. 不要在请求生命周期内缓存数据
    // ❌ 错误 - 数据会一直保留
    public function index() {
     static $data = [];
     $data[] = request()->all();
    }

// ✅ 正确 - 使用框架缓存 Cache::put('key', $value, 300);


2. **避免全局状态污染**
```php
// ❌ 错误
class Service {
    public $data;
}
// ✅ 正确 - 使用依赖注入
class Service {
    public function handle($data) { ... }
}
  1. 数据库连接管理
    // 每次请求后清理
    app()->terminating(function () {
     DB::disconnect();
    });

性能调优建议

启用 OpCache

opcache.enable=1
opcache.preload=/path/to/preload.php

配置示例

# 生产环境启动命令
php artisan octane:start \
    --workers=8 \
    --max-requests=500 \
    --task-workers=4 \
    --port=8000

使用预加载

// preload.php
$files = [
    app_path().'/Http/Controllers/UserController.php',
    app_path().'/Services/UserService.php',
];
foreach ($files as $file) {
    require_once $file;
}

常见问题解决

Q1: 连接数过多

// config/octane.php 调整连接池
'database' => [
    'default' => [
        'pool' => [
            'max_connections' => 20,
            'min_connections' => 5,
            'wait_timeout' => 3,
        ],
    ],
],

Q2: 定时任务

// 使用 Octane 的定时任务功能
Octane::schedule(function() {
    Log::info('运行定时任务');
})->everyMinute();

Q3: WebSocket 支持

use Laravel\Octane\Facades\Octane;
Octane::webSocket('/ws', function ($req) {
    return new WebSocketHandler();
});

生产环境部署

Nginx 配置示例

server {
    listen 80;
    server_name example.com;
    # 请求转发到 Octane
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

监控命令

# 查看运行状态
php artisan octane:status
# 重新加载配置
php artisan octane:reload --config
# 查看详细状态
swoole_get_status()  # 在代码中查看

性能对比

指标 PHP-FPM Laravel Octane
单请求响应时间 ~100ms ~10ms
内存占用 每请求 ~128MB 常驻 ~256MB
并发能力 100 req/s 1000+ req/s
预热时间 每请求需要 仅首次启动
  1. 使用:依赖注入、缓存系统、原子操作
  2. 避免:全局静态变量、Session 本地存储、未释放的资源
  3. 🔧 监控:定期检查内存、连接数、任务队列

Laravel Octane 特别适合:

  • 高流量 API 服务
  • 实时应用(WebSocket)
  • 需要低延迟响应的应用

注意:生产环境需要仔细测试,确保所有代码都兼容常驻内存模式。

抱歉,评论功能暂时关闭!