Native HTTP/2 support for ReactPHP
Go to file
2024-02-25 00:18:33 +01:00
src Lots of frame stubs 2024-02-25 00:18:33 +01:00
tests Initial commit 2024-02-24 20:44:06 +01:00
.gitignore Initial commit 2024-02-24 20:44:06 +01:00
composer.json Initial commit 2024-02-24 20:44:06 +01:00
phpstan.neon Initial commit 2024-02-24 20:44:06 +01:00
phpunit.xml Initial commit 2024-02-24 20:44:06 +01:00
README.md Lots of frame stubs 2024-02-25 00:18:33 +01:00

HTTP/2 Support for ReactPHP

This is a project that is exploring the feasability and practicality of bringing HTTP/2 to ReactPHP while staying true to the ReactPHP philosophy. The main rationale for this is to eventually enable native support for gRPC. Plus it is neat!

Status

Currently implemented:

  • Huffman encoding (for compressed headers)
  • Header parsing (including dictionary)
  • Frame parsing (not all frame types)

Notes

  • As HTTP/2 is multiplexed, use of promises will be essential for the library as well as any client code. Without promises, all requests will be blocking and synchronous, which isn't necessarily bad but still wasteful.

Mockup

The idea is tho end up with something like this. Expect a lot to change tho.


// Tradtional request handler
$http = function (Psr\Http\Message\ServerRequestInterface $request, ?callable $next=null) {
    $promise = new React\Promise\Promise();
    React\Loop\Loop::laterTick(function () use ($request, $promise) {
        // ...
        $promise->resolve($response);
    });
    return $promise;
};

// HTTP/2 request handler
$http2 = new NoccyLabs\React\Http2\Http2Middleware($http);

// React HTTP sever
$server = new React\Http\HttpServer(
    $http2,
    $http,
)