I want to use roadrunner as PHP application server for slimphp. Has anyone used it before?
Take this as a starting point, )$app is your Slim4 application but you should be able to handle it yourself):
./psr-worker.php
<?php
declare(strict_types=1);
require './vendor/autoload.php';
use Dhosting\AiCrowd\Common\StdLogger\ThrowableMessageFormatter;
use Dotenv\Dotenv;
use Nyholm\Psr7\Response;
use Nyholm\Psr7\Factory\Psr17Factory;
use Psr\Container\ContainerInterface;
use Slim\App;
use Spiral\RoadRunner\Worker;
use Spiral\RoadRunner\Http\PSR7Worker;
$dotEnv = Dotenv::createImmutable('./');
$dotEnv->load();
require './bootstrap/bootstrap.php';
if (isset($app)) {
$worker = Worker::create();
$factory = new Psr17Factory();
$psr7 = new PSR7Worker($worker, $factory, $factory, $factory);
while (true) {
try {
$request = $psr7->waitRequest();
if ($request === null) {
break;
}
} catch (Throwable $t) {
try {
$psr7->respond(new Response(200, [], $t->getMessage()));
error_log(ThrowableMessageFormatter::format($t));
} catch (Throwable $t) {
error_log(ThrowableMessageFormatter::format($t));
}
continue;
}
try {
/** @var App<ContainerInterface> $app */
$psr7->respond($app->handle($request));
} catch (Throwable $t) {
try {
$psr7->respond(new Response(500, [], $t->getMessage()));
error_log(ThrowableMessageFormatter::format($t));
} catch (Throwable $t) {
error_log(ThrowableMessageFormatter::format($t));
}
$psr7->getWorker()->error((string)$t);
}
}
}
./bootstrap/bootstrap.php
<?php
declare(strict_types=1);
use DI\ContainerBuilder;
use Slim\App;
$builder = new ContainerBuilder();
$builder->useAutowiring(true);
$definitions = array_merge(
require './config/settings/settings.php',
require './config/dependencies/dependencies.php',
);
$builder->addDefinitions($definitions);
$container = $builder->build();
$app = $container->get(App::class);
require './bootstrap/middleware.php';
require './bootstrap/routes.php';
./rr.yaml
version: '3'
server:
command: "php psr-worker.php"
http:
address: 0.0.0.0:80
pool:
num_workers: 1
debug: true
and finally trigger the roadrunner server:
./rr serve -c .rr.yaml
1 Like