christoph-kluge / cloudfront-edge-php-adapter
为symfony或laravel请求对象提供cloudfront边缘事件转换器
0.2.1
2021-08-10 22:24 UTC
Requires (Dev)
- bref/bref: ^0.5.3
- illuminate/http: ^5.8
- phpunit/phpunit: ^8.3
- symfony/http-foundation: ^4.3
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来说不是必需的)