go语言编写的php应用服务器FrankenPHP

go语言编写的php应用服务器FrankenPHP

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/frankenphp
Symfony 运行时

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/

{{collectdata}}

网友评论0