spiral / roadrunner-http
RoadRunner: HTTP and PSR-7 worker
Fund package maintenance!
roadrunner-server
Requires
- php: >=8.1
- ext-json: *
- psr/http-factory: ^1.0.1
- psr/http-message: ^1.0.1 || ^2.0
- spiral/roadrunner: ^2023.1
- spiral/roadrunner-worker: ^3.0
Requires (Dev)
- jetbrains/phpstorm-attributes: ^1.0
- nyholm/psr7: ^1.3
- phpunit/phpunit: ^10.0
- symfony/process: ^6.2
- vimeo/psalm: ^5.9
Suggests
- spiral/roadrunner-cli: Provides RoadRunner installation and management CLI tools
This package is auto-updated.
Last update: 2023-09-20 12:14:42 UTC
README
RoadRunner is an open-source (MIT licensed) high-performance PHP application server, load balancer, and process manager. It supports running as a service with the ability to extend its functionality on a per-project basis.
RoadRunner includes PSR-7/PSR-17 compatible HTTP and HTTP/2 server and can be used to replace classic Nginx+FPM setup with much greater performance and flexibility.
Official Website | Documentation
Repository:
This repository contains the codebase PSR-7 PHP workers. Check spiral/roadrunner to get application server.
Installation:
To install application server and HTTP codebase:
$ composer require spiral/roadrunner-http nyholm/psr7
You can use the convenient installer to download the latest available compatible version of RoadRunner assembly:
$ composer require spiral/roadrunner-cli --dev
To download latest version of application server:
$ vendor/bin/rr get
You can use any PSR-17 compatible implementation.
Example:
To init abstract RoadRunner worker:
<?php require __DIR__ . '/vendor/autoload.php'; use Nyholm\Psr7\Response; use Nyholm\Psr7\Factory\Psr17Factory; use Spiral\RoadRunner\Worker; use Spiral\RoadRunner\Http\PSR7Worker; // Create new RoadRunner worker from global environment $worker = Worker::create(); // Create common PSR-17 HTTP factory $factory = new Psr17Factory(); // // Create PSR-7 worker and pass: // - RoadRunner worker // - PSR-17 ServerRequestFactory // - PSR-17 StreamFactory // - PSR-17 UploadFilesFactory // $psr7 = new PSR7Worker($worker, $factory, $factory, $factory); while (true) { try { $request = $psr7->waitRequest(); } catch (\Throwable $e) { // Although the PSR-17 specification clearly states that there can be // no exceptions when creating a request, however, some implementations // may violate this rule. Therefore, it is recommended to process the // incoming request for errors. // // Send "Bad Request" response. $psr7->respond(new Response(400)); continue; } try { // Here is where the call to your application code will be located. // For example: // // $response = $app->send($request); // // Reply by the 200 OK response $psr7->respond(new Response(200, [], 'Hello RoadRunner!')); } catch (\Throwable $e) { // In case of any exceptions in the application code, you should handle // them and inform the client about the presence of a server error. // // Reply by the 500 Internal Server Error response $psr7->respond(new Response(500, [], 'Something Went Wrong!')); // Additionally, we can inform the RoadRunner that the processing // of the request failed. $worker->error((string)$e); } }

Testing:
This codebase is automatically tested via host repository - spiral/roadrunner.
License:
The MIT License (MIT). Please see LICENSE
for more information. Maintained
by Spiral Scout.