81af78f9cf4508ae61139b26c556b10c.png

68747470733a2f2f706f7365722e707567782e6f72672f73706972616c2f726f616472756e6e65722f76657273696f6e68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f73706972616c2f726f616472756e6e65723f7374617475732e737667badge.svg68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f73706972616c2f726f616472756e6e657268747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f73706972616c2f726f616472756e6e65722f6261646765732f7175616c6974792d73636f72652e706e6768747470733a2f2f636f6465636f762e696f2f67682f73706972616c2f726f616472756e6e65722f6272616e63682f6d61737465722f67726170682f62616467652e73766768747470733a2f2f696d672e736869656c64732e696f2f6c67746d2f616c657274732f672f73706972616c2f726f616472756e6e65722e7376673f6c6f676f3d6c67746d266c6f676f57696474683d313868747470733a2f2f696d672e736869656c64732e696f2f62616467652f646973636f72642d636861742d6d6167656e74612e737667

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.

Features:

Production-ready

PSR-7 HTTP server (file uploads, error handling, static files, hot reload, middlewares, event listeners)

HTTPS and HTTP/2 support (including HTTP/2 Push, H2C)

Fully customizable server, FastCGI support

Flexible environment configuration

No external PHP dependencies (64bit version required), drop-in (based on Goridge)

Load balancer, process manager and task pipeline

Frontend agnostic (Queue, PSR-7, GRPC, etc)

Integrated metrics (Prometheus)

Works over TCP, UNIX sockets and standard pipes

Automatic worker replacement and safe PHP process destruction

Worker create/allocate/destroy timeouts

Max jobs per worker

Worker lifecycle management (controller)

maxMemory (graceful stop)

TTL (graceful stop)

idleTTL (graceful stop)

execTTL (brute, max_execution_time)

Payload context and body

Protocol, worker and job level error management (including PHP errors)

Very fast (~250k rpc calls per second on Ryzen 1700X using 16 threads)

Integrations with Symfony, Laravel, Slim, CakePHP, Zend Expressive

Application server for Spiral

Automatic reloading on file changes

Works on Windows (Unix sockets (AF_UNIX) supported on Windows 10)

Installation:

To install:

$ composer require spiral/roadrunner

$ ./vendor/bin/rr get-binary

For getting roadrunner binary file you can use our docker image: spiralscout/roadrunner:X.X.X (more information about image and tags can be found here)

Extensions:

Extension

Current Status

spiral/jobs

68747470733a2f2f706f7365722e707567782e6f72672f73706972616c2f6a6f62732f76657273696f6e68747470733a2f2f7472617669732d63692e6f72672f73706972616c2f6a6f62732e7376673f6272616e63683d6d617374657268747470733a2f2f636f6465636f762e696f2f67682f73706972616c2f6a6f62732f6272616e63682f6d61737465722f67726170682f62616467652e737667

spiral/php-grpc

68747470733a2f2f706f7365722e707567782e6f72672f73706972616c2f7068702d677270632f76657273696f6e68747470733a2f2f7472617669732d63692e6f72672f73706972616c2f7068702d677270632e7376673f6272616e63683d6d617374657268747470733a2f2f636f6465636f762e696f2f67682f73706972616c2f7068702d677270632f6272616e63682f6d61737465722f67726170682f62616467652e737667

spiral/broadcast

68747470733a2f2f706f7365722e707567782e6f72672f73706972616c2f62726f6164636173742f76657273696f6e68747470733a2f2f7472617669732d63692e6f72672f73706972616c2f62726f6164636173742e7376673f6272616e63683d6d617374657268747470733a2f2f636f6465636f762e696f2f67682f73706972616c2f62726f6164636173742f6272616e63682f6d61737465722f67726170682f62616467652e737667

spiral/broadcast-ws

68747470733a2f2f706f7365722e707567782e6f72672f73706972616c2f62726f6164636173742d77732f76657273696f6e68747470733a2f2f7472617669732d63692e6f72672f73706972616c2f62726f6164636173742d77732e7376673f6272616e63683d6d617374657268747470733a2f2f636f6465636f762e696f2f67682f73706972616c2f62726f6164636173742d77732f6272616e63682f6d61737465722f67726170682f62616467652e737667

Example:

// worker.php

ini_set('display_errors', 'stderr');

include "vendor/autoload.php";

$relay = new Spiral\Goridge\StreamRelay(STDIN, STDOUT);

$psr7 = new Spiral\RoadRunner\PSR7Client(new Spiral\RoadRunner\Worker($relay));

while ($req = $psr7->acceptRequest()) {

try {

$resp = new \Zend\Diactoros\Response();

$resp->getBody()->write("hello world");

$psr7->respond($resp);

} catch (\Throwable $e) {

$psr7->getWorker()->error((string)$e);

}

}

Configuration can be located in .rr.yaml file (full sample):

http:

address: 0.0.0.0:8080

workers.command: "php worker.php"

Read more in Documentation.

Run:

To run application server:

$ ./rr serve -v -d

License:

The MIT License (MIT). Please see LICENSE for more information. Maintained by Spiral Scout.