christoph-kluge/cloudfront-edge-php-adapter

为symfony或laravel请求对象提供cloudfront边缘事件转换器

0.2.1 2021-08-10 22:24 UTC

This package is auto-updated.

Last update: 2024-09-10 17:34:47 UTC


README

这个小型包允许您将Cloudfront@Edge事件转换为适当的请求对象

安装

要通过Composer安装,请使用以下命令,它将自动检测最新版本并将其与^绑定。

composer require christoph-kluge/cloudfront-edge-php-adapter

使用示例(长时间运行进程 - 一个进程处理多个请求)

请注意,您的应用程序可能需要在长时间运行的进程中运行,可能需要进行适应性调整。

优点

  • 初始请求之后,您的应用程序始终处于热状态
  • 充分利用opcache的全部潜力

性能测量

此代码在生产环境api中运行。几乎所有端点都响应小于10ms(服务器响应时间),无需使用memcache/redis/..

#!/opt/bin/php
<?php

use Bref\Runtime\LambdaRuntime;

$appRoot = getenv('LAMBDA_TASK_ROOT');
require $appRoot . '/vendor/autoload.php';

/** @var \App\Extensions\Foundation\Application $app */
$app = require_once $appRoot . '/bootstrap/app.php';

/** @var CloudfrontEdgeHandler $handler */
$handler = $app->make(CloudfrontEdgeHandler::class);

$lambdaRuntime = LambdaRuntime::fromEnvironmentVariable();
while (true) {
    $lambdaRuntime->processNextEvent($handler);
}

使用(每个请求一个新进程)

#!/opt/bin/php
<?php

$appRoot = getenv('LAMBDA_TASK_ROOT');
require $appRoot . '/vendor/autoload.php';

/** @var \Illuminate\Foundation\Application $app */
$app = require_once $appRoot . '/bootstrap/app.php';

lambda($app->make(CloudfrontEdgeHandler::class));

特性

  • 支持不同方法的请求(GET,HEAD,POST,PUT,DELETE,..)
  • 支持laravel的专用响应对象(Response,RedirectResponse,JsonResponse)
  • 支持来自HTML表单的POST请求,内容类型为x-www-form-urlencoded
  • 支持cookie
  • 原始自定义 - 读取自定义头信息
  • 原始s3 - 读取自定义头信息
  • 响应可能会将头信息作为响应内的多个列表项发送
  • 附件 - 单个(<input name="single"/>
  • 附件 - 多个 - 单个命名(<input name="single_1"/> <input name="single_2"/>
  • 附件 - 多个 - 基于数组的输入(<input name="file_as_array[]"/> <input name="file_as_array[]"/>
  • 附件 - 多个 - 基于数组的,具有多个标志(<input name="files_as_array_multiple[]" multiple/>

待办事项

  • 附件 - 多个 - 单个命名,具有多个标志(<input name="single_with_multiple" multiple/>
  • 附件 - 多个 - 多维输入名称,没有多个标志(<input name="myfile[a][b]"/>
  • 附件 - 多个 - 多维输入名称,具有多个标志(<input name="myfile[a][b]"multiple/>
  • 附件 - 多个 - 多维输入名称,具有数组,没有多个标志(<input name="myfile[a][b][]"/>
  • 附件 - 多个 - 多维输入名称,具有数组,具有多个标志(<input name="myfile[a][b][]" multiple/>
  • 检查不同内容类型(json,x-www-form-urlencode,..?)的POST请求
  • 检查204响应为什么以JSON返回“{}”而不是“”
  • Cloudfront可能会为单个头信息发送多个列表项
  • 原始自定义 - 原始协议策略(中等优先级 - 我猜可能存在不使用SSL的情况)
  • 原始自定义 - 读取不同路径(低优先级 - 我认为对于lambda来说不是必需的)
  • 原始自定义 - SSL协议(低优先级 - 我认为对于lambda来说不是必需的)
  • 原始s3 - 原始协议策略(中等优先级 - 我猜可能存在不使用SSL的情况)
  • 原始s3 - 读取不同路径(低优先级 - 我认为对于lambda来说不是必需的)
  • 原始s3 - 限制存储桶(低优先级 - 我认为对于lambda来说不是必需的)