Categorygithub.com/agui2200/roadrunner
modulepackage
1.3.4
Repository: https://github.com/agui2200/roadrunner.git
Documentation: pkg.go.dev

# README

RoadRunner

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.

Table of Contents

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)
  • fully customizable server
  • flexible environment configuration
  • no external PHP dependencies, drop-in (based on Goridge)
  • load balancer, process manager and task pipeline
  • frontend agnostic (Queue, PSR-7, GRPC, etc)
  • works over TCP, unix sockets and standard pipes
  • automatic worker replacement and safe PHP process destruction
  • worker lifecycle management (create/allocate/destroy timeouts)
  • payload context and body
  • control over max jobs per worker
  • protocol, worker and job level error management (including PHP errors)
  • memory leak failswitch
  • very fast (~250k rpc calls per second on Ryzen 1700X using 16 threads)
  • works on Windows

Example:

<?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:

http:
  address: 0.0.0.0:8080
  workers:
    command: "php psr-worker.php"
    pool:
      numWorkers: 4

Read more in Wiki.

License:

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

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

NewPipeFactory returns new factory instance and starts listening.
NewPool creates new worker pool and task multiplexer.
NewServer creates new router.
NewSocketFactory returns SocketFactory attached to a given socket lsn.

# Constants

EventPoolConstruct triggered when server creates new pool.
EventPoolDestruct triggered when server destroys existed pool.
EventPoolError caused on pool wide errors.
EventServerFailure triggered when server is unable to replace dead pool.
EventServerStart triggered when server creates new pool.
EventServerStop triggered when server creates new pool.
EventStderrOutput - is triggered when worker sends data into stderr.
EventWorkerConstruct thrown when new worker is spawned.
EventWorkerDead thrown when worker stops worker for any reason.
EventWorkerDestruct thrown after worker destruction.
EventWorkerError thrown any worker related even happen (passed with WorkerError).
EventWorkerKill thrown after worker is being forcefully killed.
StateErrored - error state (can't be used).
StateInactive - no associated process.
StateReady - ready for job.
StateStopped - process has been terminated.
StateStopping - process is being softly stopped.
StateStreaming - indicates that worker is streaming the data at the moment.
StateWorking - working on given payload.
StopRequest can be sent by worker to indicate that restart is required.
WaitDuration - for how long error buffer should attempt to aggregate error messages before merging output together since lastError update (required to keep error update together).

# Structs

Config defines basic behaviour of worker creation and handling process.
Payload carries binary header and body to workers and back to the server.
PipeFactory connects to workers using standard streams (STDIN, STDOUT pipes).
Server manages pool creation and swapping.
ServerConfig config combines factory, pool and cmd configurations.
SocketFactory connects to external workers using socket server.
StaticPool controls worker creation, destruction and task routing.
Worker - supervised process with api over goridge.Relay.
WorkerError is worker related error.

# Interfaces

Factory is responsible of wrapping given command into tasks worker.
Pool managed set of inner worker processes.
State represents worker status and updated time.

# Type aliases

JobError is job level error (no worker halt), wraps at top of error context.