From df1d2a58bf0d65084058ef0e4fc95086ed988274 Mon Sep 17 00:00:00 2001 From: pronchev Date: Sun, 22 Mar 2026 16:22:02 +0300 Subject: [PATCH] Replace ServerStartCommand with WorkerRunner FrankenPHP workers are PHP files started by the frankenphp binary, not console commands. Extract the frankenphp_handle_request() loop into Http\WorkerRunner so apps can use it directly from worker.php. Remove src/Command/ as it's no longer needed. Co-Authored-By: Claude Sonnet 4.6 --- CLAUDE.md | 19 ++++++++++++++++++- .../WorkerRunner.php} | 11 +++-------- 2 files changed, 21 insertions(+), 9 deletions(-) rename src/{Command/ServerStartCommand.php => Http/WorkerRunner.php} (73%) diff --git a/CLAUDE.md b/CLAUDE.md index 61d962a..65ba3bd 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,7 +35,7 @@ HTTP → Caddy (:80) → /worker.php → FrankenPHP worker loop | Path | Purpose | |---|---| | `src/Kernel.php` | One-time bootstrap | -| `src/Http/` | `HttpApplication`, `Request`, `Response`, `Router`, `RouteDefinition`, `MiddlewarePipeline`, `HttpException` | +| `src/Http/` | `HttpApplication`, `WorkerRunner`, `Request`, `Response`, `Router`, `RouteDefinition`, `MiddlewarePipeline`, `HttpException` | | `src/Console/` | `ConsoleApplication`, `ConsoleRouter`, `ConsoleInput`, `ConsoleOutput`, `ConsoleDefinition` | | `src/Auth/` | `JwtService`, `AuthMiddleware`, `AuthContext`, `AuthException`, `UserProviderInterface` | | `src/Log/` | `StdoutLogger`, `FileLogger`, `CompositeLogger`, `NullLogger` | @@ -45,6 +45,23 @@ HTTP → Caddy (:80) → /worker.php → FrankenPHP worker loop | `src/Config.php` | Static config loader: `Config::get('section.key')` | | `src/ContainerFactory.php` | Builds PHP-DI container from `config/services.php` | +## Worker entrypoint + +FrankenPHP запускается бинарником (`frankenphp run --config Caddyfile`), который сам стартует PHP-воркеры. `worker.php` приложения должен: + +```php +use Pronchev\Pinecore\Kernel; +use Pronchev\Pinecore\Http\WorkerRunner; + +require __DIR__ . '/vendor/autoload.php'; + +Kernel::boot(__DIR__); +Kernel::container()->get(WorkerRunner::class)->run(); +``` + +`WorkerRunner` резолвится через DI autowiring, конфигурировать не нужно. +`MAX_REQUESTS` env var ограничивает число запросов на воркер (0 = без лимита). + ## HTTP ```php diff --git a/src/Command/ServerStartCommand.php b/src/Http/WorkerRunner.php similarity index 73% rename from src/Command/ServerStartCommand.php rename to src/Http/WorkerRunner.php index 78f2867..c270917 100644 --- a/src/Command/ServerStartCommand.php +++ b/src/Http/WorkerRunner.php @@ -1,20 +1,17 @@