Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/roadrunner-php/http

🔌 PSR7 Worker Client for RoadRunner application server.
https://github.com/roadrunner-php/http

hacktoberfest http php psr-17 psr-7 roadrunner

Last synced: 2 days ago
JSON representation

🔌 PSR7 Worker Client for RoadRunner application server.

Awesome Lists containing this project

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](https://github.com/spiral/roadrunner) to get application server.

## Requirements:

Ensure that your server is configured with the following PHP versions and extensions:

- PHP >=8.1
- ext-protobuf: This extension is optional but **highly recommended for installation**.
Without it, performance may be up to 50% lower.
- RoadRunner ^2023.3

## Installation:

To install application server and HTTP codebase:

```bash
composer require spiral/roadrunner-http nyholm/psr7
```

You can use the convenient installer to download the latest available compatible version of RoadRunner assembly:

```bash
composer require spiral/roadrunner-cli --dev
```

To download latest version of application server:

```bash
vendor/bin/rr get
```

> You can use any [PSR-17 compatible implementation](https://packagist.org/providers/psr/http-factory-implementation).

## Example:

To init abstract RoadRunner worker:

```php
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);
}
}
```

### Stream response

To send a response in a stream, set the `$chunkSize` property in `PSR7Worker`:

```php
$psr7 = new PSR7Worker($worker, $factory, $factory, $factory);
$psr7->chunkSize = 512 * 1024; // 512KB
```

Now PSR7Worker will cut the response into chunks of 512KB and send them to the stream.

### Early hints

To send multiple responses you may use the `\Spiral\RoadRunner\Http\HttpWorker::respond()` method with
the `endOfStream` parameter set to `false`. This will send the response to the client and allow you to send
additional responses.

```php
/** @var \Spiral\RoadRunner\Http\PSR7Worker $psr7 */
$httpWorker = $psr7->getHttpWorker()
->respond(103, header: ['Link' => ['; rel=preload; as=style']], endOfStream: false);

// End of stream will be sent automatically after PSR7Worker::respond() call
$psr7->respond(new Response(200, [], 'Hello RoadRunner!'));
```

[![try Spiral Framework](https://user-images.githubusercontent.com/773481/220979012-e67b74b5-3db1-41b7-bdb0-8a042587dedc.jpg)](https://spiral.dev/)

## Testing:

This codebase is automatically tested via host repository - [spiral/roadrunner](https://github.com/roadrunner-server/roadrunner).

## License:

The MIT License (MIT). Please see [`LICENSE`](./LICENSE) for more information. Maintained
by [Spiral Scout](https://spiralscout.com).