@@ -79,71 +79,37 @@ The create your React Http server
7979``` php
8080#!/usr/bin/env php
8181<?php
82- // public/index.php or everywhere you want to allocate your server
8382
8483declare(strict_types=1);
8584
8685use Antidot\Application\Http\Application;
87- use Antidot\React\PromiseResponse;
88- use Laminas\Diactoros\Response\HtmlResponse;
89- use Psr\Http\Message\ServerRequestInterface;
90- use Ramsey\Uuid\Uuid;
91- use React\EventLoop\Factory;
92- use React\Http\Middleware\LimitConcurrentRequestsMiddleware;
93- use React\Http\Middleware\RequestBodyBufferMiddleware;
94- use React\Http\Middleware\RequestBodyParserMiddleware;
95- use React\Http\Middleware\StreamingRequestMiddleware;
86+ use Antidot\React\Child;
87+ use Psr\Log\LoggerInterface;
88+ use React\EventLoop\LoopInterface;
9689use React\Http\Server;
9790use React\Socket\Server as Socket;
98- use function React\Promise\resolve;
9991
10092require 'vendor/autoload.php';
10193
10294call_user_func(static function () {
103- $loop = Factory::create();
10495 $container = require 'config/container.php';
10596 $application = $container->get(Application::class);
10697 (require 'router/middleware.php')($application, $container);
10798 (require 'router/routes.php')($application, $container);
10899
109- $server = new Server(
110- $loop,
111- new StreamingRequestMiddleware(),
112- new LimitConcurrentRequestsMiddleware(100), // 100 concurrent buffering handlers
113- new RequestBodyBufferMiddleware(4 * 1024 * 1024), // 4 MiB
114- new RequestBodyParserMiddleware(),
115- static function (ServerRequestInterface $request) use ($application) {
116- try {
117- $response = new PromiseResponse(
118- resolve($request)
119- ->then(static fn ($request) => $request->withAttribute('request_id', Uuid::uuid4()->toString()))
120- ->then(static fn ($request) => $application->handle($request))
121- );
122- } catch (Throwable $exception) {
123- if (!empty($e = $exception->getPrevious())) {
124- $exception = $e;
125- }
126-
127- $response = new HtmlResponse(
128- sprintf(
129- '%s in file %s in line %s.',
130- $exception->getMessage(),
131- $exception->getFile(),
132- $exception->getLine()
133- )
134- );
135- }
136-
137- return resolve($response);
138- }
139- );
140-
141- $server->on('error', function ($err) {
142- dump($err);
143- });
144-
145- $socket = new Socket('0.0.0.0:8080', $loop);
146- $server->listen($socket);
100+ $loop = $container->get(LoopInterface::class);
101+ Child::fork(
102+ shell_exec('nproc') ? (int)shell_exec('nproc') : 16,
103+ static function () use ($container) {
104+ $server = $container->get(Server::class);
105+ $server->on('error', static function ($err) use ($container) {
106+ $logger = $container->get(LoggerInterface::class);
107+ $logger->critical($err);
108+ });
109+
110+ $socket = $container->get(Socket::class);
111+ $server->listen($socket);
112+ });
147113
148114 $loop->run();
149115});
0 commit comments