alexmanno / roadrunner

High-performance PHP application server, load-balancer and process manager written in Golang

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

RoadRunner

Latest Stable Version GoDoc Build Status Go Report Card Scrutinizer Code Quality Codecov

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 compatible HTTP/HTTPS server and can be used to replace classic Nginx+FPM setup with much greater performance.

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, REST, PSR-7, async php, 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

License:

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

About

High-performance PHP application server, load-balancer and process manager written in Golang

License:MIT License


Languages

Language:Go 86.7%Language:PHP 12.7%Language:Shell 0.4%Language:Makefile 0.1%