spiral/roadrunner-laravel

此包已弃用且不再维护。作者建议使用 laravel/octane 包。

RoadRunner:Laravel应用的桥梁

v5.12.0 2023-08-21 06:54 UTC

README

logo

RoadRunnerLaravel 桥接器

Version Version Build Status Coverage Downloads count Chat License

连接 RoadRunnerLaravel 应用程序的简单方式(社区集成)。

🐋 如果你想看一个在 Docker 容器中运行,以 RoadRunner 作为 Web 服务器的 Laravel 应用程序的示例 - 请查看 此存储库

安装

请确保系统(或 Docker 镜像)上已安装 RR 二进制文件。使用以下命令通过 composer 安装此包

$ composer require spiral/roadrunner-laravel

需要安装 composer如何安装 composer)。

然后您可以使用以下命令“发布”包配置文件(./config/roadrunner.php

$ php ./artisan vendor:publish --provider='Spiral\RoadRunnerLaravel\ServiceProvider' --tag=config

重要:尽管工作进程允许您在每次 HTTP 请求时刷新应用程序实例 (如果工作进程以 --refresh-app 选项启动,例如:php ./vendor/bin/rr-worker start --refresh-app,但我们强烈建议出于性能原因避免这样做。大型应用程序可能难以与 RoadRunner 集成 (您必须决定哪些服务提供者在每次请求时需要重新加载,在某些情况下避免“静态优化”),但这值得。

升级指南

v4.xv5.x

  • 更新应用程序中的当前包
    • composer remove spiral/roadrunner-laravel
    • composer require spiral/roadrunner-laravel "^5.0"
  • 更新包配置文件(roadrunner.php;请查看当前存储库中的实际示例)

v3.xv4.x

  • 更新应用程序中的当前包
    • composer remove spiral/roadrunner-laravel
    • composer require spiral/roadrunner-laravel "^4.0"
  • 更新您的 .rr.yaml 配置(请查看示例 此处) - 许多选项已更改
    • 可选:更改中继到套接字或 TCP 端口
      server:
        command: "php ./vendor/bin/rr-worker start --relay-dsn unix:///var/run/rr-relay.sock"
        relay: "unix:///var/run/rr-relay.sock"
  • 更新 RR 二进制文件(使用 roadrunner-cli 或从 二进制发布 页面下载)至 v2.x
  • 更新 RoadRunner 启动标志(rr serve ...) - -v-d 不再使用
  • 在您的应用程序代码中,将 Spiral\RoadRunner\PSR7Client 替换为 Spiral\RoadRunner\Http\PSR7Worker

用法

安装包后,您可以使用提供的“二进制”文件作为 RoadRunner 工作进程:./vendor/bin/rr-worker。此工作进程允许您使用 laravel 事件系统 与传入请求和传出响应进行交互。事件包含

简单的 .rr.yaml 配置示例(完整的示例可以在 此处 找到)

对于 windows,路径必须是完整的(例如:php vendor/spiral/roadrunner-laravel/bin/rr-worker start

version: "2.7"

server:
  command: "php ./vendor/bin/rr-worker start --relay-dsn unix:///var/run/rr-relay.sock"
  relay: "unix:///var/run/rr-relay.sock"

http:
  address: 0.0.0.0:8080
  middleware: ["static", "headers", "gzip"]
  pool:
    #max_jobs: 64 # feel free to change this
    supervisor:
      exec_ttl: 60s
  headers:
    response:
      X-Powered-By: "RoadRunner"
  static:
    dir: "public"
    forbid: [".php"]

SocketTCP端口 中继使用被强烈推荐,以避免与 dd()dump()echo() 等类似函数的问题,这些函数会将数据发送到IO管道。

Roadrunner服务器启动中

$ rr serve -c ./.rr.yaml

监听器

此软件包提供事件监听器,用于重置应用程序状态,无需完全重新加载应用程序(如cookies、HTTP请求、应用程序实例、服务提供者等)。其中一些已在配置文件中声明,但您可以无限制地声明自己的。

辅助函数

此软件包提供以下辅助函数

已知问题

性能下降

...当为您的会话设置 file 驱动程序时。请使用 redis(或类似)驱动程序代替(相关问题)。此软件包或/和RoadRunner与此无关,但由于这是一个相当常见的问题,因此在此进行了描述。

控制器构造函数

您应该避免使用HTTP控制器构造函数(在构造函数中创建或解析的实例可以在不同的请求之间共享)。请在控制器的 方法 中使用依赖关系解析。

不好

<?php

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * The user repository instance.
     */
    protected $users;

    /**
     * @var Request
     */
    protected $request;

    /**
     * @param UserRepository $users
     * @param Request        $request
     */
    public function __construct(UserRepository $users, Request $request)
    {
        $this->users   = $users;
        $this->request = $request;
    }

    /**
     * @return Response
     */
    public function store(): Response
    {
        $user = $this->users->getById($this->request->id);

        // ...
    }
}

<?php

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * @param  Request        $request
     * @param  UserRepository $users
     *
     * @return Response
     */
    public function store(Request $request, UserRepository $users): Response
    {
        $user = $users->getById($request->id);

        // ...
    }
}

中间件构造函数

您绝不应该使用中间件构造函数来解析和 存储 sessionsession.storeauth 或认证 Guard 实例,并将它们存储在属性中(例如)。请使用方法注入或通过 Request 实例访问它们。

不好

<?php

use Illuminate\Http\Request;
use Illuminate\Session\Store;

class Middleware
{
    /**
     * @var Store
     */
    protected $session;

    /**
     * @param Store $session
     */
    public function __construct(Store $session)
    {
        $this->session = $session;
    }

    /**
     * Handle an incoming request.
     *
     * @param Request  $request
     * @param \Closure $next
     *
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        $name = $this->session->getName();

        // ...

        return $next($request);
    }
}

<?php

use Illuminate\Http\Request;

class Middleware
{
    /**
     * Handle an incoming request.
     *
     * @param Request  $request
     * @param \Closure $next
     *
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        $name = $request->session()->getName();
        // $name = resolve('session')->getName();

        // ...

        return $next($request);
    }
}

测试

对于软件包测试,我们使用 phpunit 框架和 docker-ce + docker-compose 作为开发环境。因此,在克隆存储库后,只需在您的终端中写入

$ make build
$ make latest # or 'make lowest'
$ make test

变更日志

Release date Commits since latest release

变更日志可以在这里找到

支持

Issues Issues

如果您发现任何软件包错误,请在当前存储库中创建问题

许可证

MIT许可证(MIT)。有关更多信息,请参阅LICENSE。由tarampampamSpiral Scout维护。