-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRoadRunnerWorker.php
More file actions
76 lines (65 loc) · 1.64 KB
/
RoadRunnerWorker.php
File metadata and controls
76 lines (65 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
declare(strict_types=1);
namespace Lit\Runner\RoadRunner;
use Lit\Air\Factory;
use Lit\Bolt\BoltApp;
use Lit\Bolt\BoltContainerConfiguration;
use Psr\Container\ContainerInterface;
use Spiral\RoadRunner\PSR7Client;
/**
* roadrunner worker
*/
class RoadRunnerWorker
{
/**
* @var PSR7Client
*/
protected $psr7;
/**
* @var BoltApp
*/
protected $app;
/**
* @var int
*/
protected $maxRequest;
public function __construct(PSR7Client $psr7, BoltApp $app, int $maxRequest = 0)
{
$this->psr7 = $psr7;
$this->app = $app;
$this->maxRequest = $maxRequest;
}
/**
* run a bolt app as roadrunner worker
*
* @param array $config The application configuration.
*/
public static function run($config = [])
{
$container = $config instanceof ContainerInterface
? $config
: BoltContainerConfiguration::createContainer($config + RoadRunnerConfiguration::default());
/**
* @var static
*/
$instance = Factory::of($container)->getOrProduce(static::class);
$instance->loop();
exit(0);
}
protected function loop()
{
$reqCount = 0;
while ($req = $this->psr7->acceptRequest()) {
try {
$resp = $this->app->handle($req);
$this->psr7->respond($resp);
} catch (\Throwable $e) {
$this->psr7->getWorker()->error((string)$e);
}
$reqCount++;
if ($this->maxRequest > 0 && $reqCount >= $this->maxRequest) {
break;
}
}
}
}