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.
- Process manager;
- Scheduler;
- Workers lifecycle management (reload by TTL, max memory, max requests, on exception, on each request);
- HTTP/2
- Unix based OS (no windows support);
- php-posix and php-pcntl extensions;
- php-uv extension is not required, but recommended for better performance.
$ composer require luzrain/phpstreamserver
Here is example of simple http server.
// server.php
use Amp\Http\Server\HttpErrorException;use Amp\Http\Server\Request;use Amp\Http\Server\Response;use Luzrain\PHPStreamServer\BundledPlugin\HttpServer\HttpServerPlugin;use Luzrain\PHPStreamServer\BundledPlugin\HttpServer\HttpServerProcess;use Luzrain\PHPStreamServer\BundledPlugin\Scheduler\PeriodicProcess;use Luzrain\PHPStreamServer\BundledPlugin\Scheduler\SchedulerPlugin;use Luzrain\PHPStreamServer\Plugin\Supervisor\WorkerProcess;use Luzrain\PHPStreamServer\Server;
$server = new Server();
$server->addPlugin(
new HttpServerPlugin(),
new SchedulerPlugin(),
);
$server->addWorker(
new HttpServerProcess(
name: 'Web Server',
count: 1,
listen: '0.0.0.0:8088',
onStart: function (HttpServerProcess $worker, mixed &$context): void {
// initialization
},
onRequest: function (Request $request, mixed &$context): Response {
return match ($request->getUri()->getPath()) {
'/' => new Response(body: 'Hello world'),
'/ping' => new Response(body: 'pong'),
default => throw new HttpErrorException(404),
};
}
),
new WorkerProcess(
name: 'Supervised Program',
count: 1,
onStart: function (WorkerProcess $worker): void {
// custom long running process
},
),
new PeriodicProcess(
name: 'Scheduled program',
schedule: '*/1 * * * *',
onStart: function (PeriodicProcess $worker): void {
// runs every 1 minute
},
),
);
exit($server->run());
$ php server.php start