FrankenPHP基于Caddy构建的生产级Web 服务器,支持自动 HTTPS、HTTP/2、HTTP/3、高级日志记录、zstd 和 gzip 压缩,FrankenPHP程序首次启动一次并将其保存在内存中!FrankenPHP 依赖于 Go 的标志性功能:goroutines!FrankenPHP 在设计时考虑到了简单性:只有一种服务,只有一种二进制文件!FrankenPHP 不需要 PHP-FPM,它使用自己的 SAPI 专门为 Go Web 服务器手工制作。
FrankenPHP 是一个云原生应用程序,作为即用型单个 Docker 映像提供。它与 Kubernetes 和所有现代云平台兼容。如果您不想使用 Docker,它也受支持。
Early Hints是 Web 平台的全新功能,可以将网站加载时间提高 30%。FrankenPHP 是唯一支持早期提示的 PHP SAPI!FrankenPHP 有一个内置的Mercure中心。将事件从您的 PHP 应用程序发送到所有连接的浏览器,它们会立即将有效负载作为 JavaScript 事件接收!
FrankenPHP入门
我们编写一个示例文件,public文件夹新建一个index.php
public/index.php
<?php // public/index.php //启动app require __DIR__.'/vendor/autoload.php'; $myApp = new \App\Kernel(); $myApp->boot(); do { $running = frankenphp_handle_request(function () use ($myApp) { // 当有请求时执行 echo $myApp->handle($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER); }); // http 响应后执行 $myApp->terminate(); } while ($running); // 清理内存 $myApp->shutdown();
然后,启动您的应用程序并使用FRANKENPHP_CONFIG环境变量来配置您的工作人员:
docker run \ -e FRANKENPHP_CONFIG="worker ./public/index.php" \ -v $PWD:/app \ -p 80:80 -p 443:443 \ dunglas/frankenphp默认情况下,每个 CPU 启动一个工作程序。您还可以配置要启动的工作人员数量:
docker run \ -e FRANKENPHP_CONFIG="worker ./public/index.php 42" \ -v $PWD:/app \ -p 80:80 -p 443:443 \ dunglas/frankenphpSymfony 运行时
Symfony 运行时组件支持 FrankenPHP 的工作模式。要在 worker 中启动任何 Symfony 应用程序,请安装PHP Runtime的 FrankenPHP 包:
composer require runtime/frankenphp-symfony
然后设置APP_RUNTIME环境变量以使用 FrankenPHP Symfony Runtime:
# .env APP_RUNTIME='Runtime\FrankenPhpSymfony\Runtime'
最后,启动您的应用服务器:
docker run \ -e FRANKENPHP_CONFIG="worker ./public/index.php" \ -v $PWD:/app \ -p 80:80 -p 443:443 \ dunglas/frankenphp
总结
frankenphp与swoole很类似,都是常驻内存,frankenphp有自动清理内存机制,防止内存溢出等问题。
官网:https://frankenphp.dev/
网友评论0