luzrain/phpstreamserver

High performance PHP application server

v0.2.2 2024-05-15 15:52 UTC

This package is auto-updated.

Last update: 2024-09-27 16:43:33 UTC


README

PHPStreamServer - PHP Application Server

PHP >=8.2 Version Tests Status

Note

This package is now under development

PHPStreamServer is a high performance event-loop based process manager, scheduler and webserver written in PHP. This application server is designed to replace traditional setup for running php applications such as nginx, php-fpm, cron, supervisor.

Key features:

  • Process manager;
  • Scheduler;
  • Workers lifecycle management (reload by TTL, max memory, max requests, on exception, on each request);
  • HTTP/2

Requirements and limitations:

  • Unix based OS (no windows support);
  • php-posix and php-pcntl extensions;
  • php-uv extension is not required, but recommended for better performance.

Getting started

Install composer packages

$ composer require luzrain/phpstreamserver

Configure server

Here is example of simple http server.

// server.php

use Amp\Http\Server\HttpErrorException;
use Amp\Http\Server\Request;
use Amp\Http\Server\RequestHandler\ClosureRequestHandler;
use Amp\Http\Server\Response;
use Luzrain\PHPStreamServer\Plugin\HttpServer\HttpServerModule;
use Luzrain\PHPStreamServer\Plugin\HttpServer\Listen;
use Luzrain\PHPStreamServer\Server;
use Luzrain\PHPStreamServer\WorkerProcess;

$server = new Server();

$server->addWorkerProcess(new WorkerProcess(
    name: 'HTTP Server',
    onStart: function (WorkerProcess $worker) {
        $requestHandler = new ClosureRequestHandler(function (Request $request) : Response {
            return match ($request->getUri()->getPath()) {
                '/' => new Response(body: 'Hello world'),
                '/ping' => new Response(body: 'pong'),
                default => throw new HttpErrorException(404),
            };
        });

        $worker->startWorkerModule(new HttpServerModule(
            listen: new Listen(listen: '0.0.0.0:8087'),
            requestHandler: $requestHandler,
        ));
    },
));

exit($server->run());

Run

$ php server.php start