To migration integration from RoadRunner v1.* to v2.*/v2023+ follow the next steps.
Second version of RoadRunner use single worker factory for all of its plugins. This means that you must include a new
section
into your config server
which is responsible for the worker creation. Limit service no longer presented as separate
entity
but rather part of specific service configuration.
{% code title=".rr.yaml" %}
rpc:
listen: tcp://127.0.0.1:6001
server:
command: "php tests/psr-worker-bench.php"
http:
address: "0.0.0.0:8080"
pool:
num_workers: 4
{% endcode %}
{% hint style="warning" %} Read more in config reference. {% endhint %}
RoadRunner 2.0+ intercepts all output to the STDOUT, this means you can start using default var_dump and other echo function without breaking the communication. Yay!
We no longer ship the default PSR implementation with RoadRunner, make sure to include one you like the most by yourself. For example:
$ composer require nyholm/psr7
RoadRunner simplifies worker creation, use static create()
method to automatically configure your worker:
{% code title="worker.php" %}
<?php
use Spiral\RoadRunner;
include "vendor/autoload.php";
$worker = RoadRunner\Worker::create();
{% endcode %}
Pass the PSR-15 factories to your PSR Worker:
{% code title="worker.php" %}
<?php
use Spiral\RoadRunner;
use Nyholm\Psr7;
include "vendor/autoload.php";
$worker = RoadRunner\Worker::create();
$psrFactory = new Psr7\Factory\Psr17Factory();
$worker = new RoadRunner\Http\PSR7Worker($worker, $psrFactory, $psrFactory, $psrFactory);
{% endcode %}
RoadRunner 2 unifies all workers to use similar naming, change acceptRequest
to waitRequest
:
{% code title="worker.php" %}
<?php
while ($req = $worker->waitRequest()) {
try {
$rsp = new Psr7\Response();
$rsp->getBody()->write('Hello world!');
$worker->respond($rsp);
} catch (\Throwable $e) {
$worker->getWorker()->error((string)$e);
}
}
{% endcode %}
To create RPC client use new Goridge API:
{% code title="worker.php" %}
<?php
$rpc = \Spiral\Goridge\RPC\RPC::create('tcp://127.0.0.1:6001');
{% endcode %}