Skip to content

Commit c0fb86e

Browse files
committed
Add the event loop as required constructor argument
For now we won't use it just yet. But this will prepare our API for future features like keep alive connections, dead connection clean up etc. Even though we won't use it in the next release, it will put it in the API so we don't have to break it again when we add features that require the event loop. As a result of this requirement the event loop has been added as a dependency, and the socket and stream packages have been bumped to their stable version.
1 parent 16ad5a9 commit c0fb86e

23 files changed

Lines changed: 196 additions & 188 deletions

README.md

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ This is an HTTP server which responds with `Hello World!` to every request.
101101
```php
102102
$loop = React\EventLoop\Factory::create();
103103

104-
$server = new React\Http\Server(function (Psr\Http\Message\ServerRequestInterface $request) {
104+
$server = new React\Http\Server($loop, function (Psr\Http\Message\ServerRequestInterface $request) {
105105
return new React\Http\Response(
106106
200,
107107
array(
@@ -714,7 +714,7 @@ the constructor and will be invoked with the respective [request](#server-reques
714714
object and expects a [response](#response) object in return:
715715

716716
```php
717-
$server = new React\Http\Server(function (Psr\Http\Message\ServerRequestInterface $request) {
717+
$server = new React\Http\Server($loop, function (Psr\Http\Message\ServerRequestInterface $request) {
718718
return new React\Http\Response(
719719
200,
720720
array(
@@ -742,7 +742,7 @@ chapter. In its most simple form, you can attach this to a
742742
to start a plaintext HTTP server like this:
743743

744744
```php
745-
$server = new React\Http\Server($handler);
745+
$server = new React\Http\Server($loop, $handler);
746746

747747
$socket = new React\Socket\Server('0.0.0.0:8080', $loop);
748748
$server->listen($socket);
@@ -803,7 +803,7 @@ to explicitly configure the total number of requests that can be handled at
803803
once like this:
804804

805805
```php
806-
$server = new React\Http\Server(array(
806+
$server = new React\Http\Server($loop, array(
807807
new React\Http\Middleware\StreamingRequestMiddleware(),
808808
new React\Http\Middleware\LimitConcurrentRequestsMiddleware(100), // 100 concurrent buffering handlers
809809
new React\Http\Middleware\RequestBodyBufferMiddleware(2 * 1024 * 1024), // 2 MiB per request
@@ -822,7 +822,7 @@ also use a streaming approach where only small chunks of data have to be kept
822822
in memory:
823823

824824
```php
825-
$server = new React\Http\Server(array(
825+
$server = new React\Http\Server($loop, array(
826826
new React\Http\Middleware\StreamingRequestMiddleware(),
827827
$handler
828828
));
@@ -851,7 +851,7 @@ messages. In its most common form, you can attach this to a
851851
order to start a plaintext HTTP server like this:
852852

853853
```php
854-
$server = new React\Http\Server($handler);
854+
$server = new React\Http\Server($loop, $handler);
855855

856856
$socket = new React\Socket\Server('0.0.0.0:8080', $loop);
857857
$server->listen($socket);
@@ -877,7 +877,7 @@ using a secure TLS listen address, a certificate file and optional
877877
`passphrase` like this:
878878

879879
```php
880-
$server = new React\Http\Server($handler);
880+
$server = new React\Http\Server($loop, $handler);
881881

882882
$socket = new React\Socket\Server('tls://0.0.0.0:8443', $loop, array(
883883
'local_cert' => __DIR__ . '/localhost.pem'
@@ -902,7 +902,7 @@ which in turn extends the
902902
and will be passed to the callback function like this.
903903

904904
```php
905-
$server = new Server(function (ServerRequestInterface $request) {
905+
$server = new Server($loop, function (ServerRequestInterface $request) {
906906
$body = "The method of the request is: " . $request->getMethod();
907907
$body .= "The requested path is: " . $request->getUri()->getPath();
908908

@@ -945,7 +945,7 @@ The following parameters are currently available:
945945
Set to 'on' if the request used HTTPS, otherwise it won't be set
946946

947947
```php
948-
$server = new Server(function (ServerRequestInterface $request) {
948+
$server = new Server($loop, function (ServerRequestInterface $request) {
949949
$body = "Your IP is: " . $request->getServerParams()['REMOTE_ADDR'];
950950

951951
return new Response(
@@ -970,7 +970,7 @@ The `getQueryParams(): array` method can be used to get the query parameters
970970
similiar to the `$_GET` variable.
971971

972972
```php
973-
$server = new Server(function (ServerRequestInterface $request) {
973+
$server = new Server($loop, function (ServerRequestInterface $request) {
974974
$queryParams = $request->getQueryParams();
975975

976976
$body = 'The query parameter "foo" is not set. Click the following link ';
@@ -1024,7 +1024,7 @@ By default, this method will only return parsed data for requests using
10241024
request headers (commonly used for `POST` requests for HTML form submission data).
10251025

10261026
```php
1027-
$server = new Server(function (ServerRequestInterface $request) {
1027+
$server = new Server($loop, function (ServerRequestInterface $request) {
10281028
$name = $request->getParsedBody()['name'] ?? 'anonymous';
10291029

10301030
return new Response(
@@ -1048,7 +1048,7 @@ an XML (`Content-Type: application/xml`) request body (which is commonly used fo
10481048
`POST`, `PUT` or `PATCH` requests in JSON-based or RESTful/RESTish APIs).
10491049

10501050
```php
1051-
$server = new Server(function (ServerRequestInterface $request) {
1051+
$server = new Server($loop, function (ServerRequestInterface $request) {
10521052
$data = json_decode((string)$request->getBody());
10531053
$name = $data->name ?? 'anonymous';
10541054

@@ -1071,7 +1071,7 @@ This array will only be filled when using the `Content-Type: multipart/form-data
10711071
request header (commonly used for `POST` requests for HTML file uploads).
10721072

10731073
```php
1074-
$server = new Server(function (ServerRequestInterface $request) {
1074+
$server = new Server($loop, function (ServerRequestInterface $request) {
10751075
$files = $request->getUploadedFiles();
10761076
$name = isset($files['avatar']) ? $files['avatar']->getClientFilename() : 'nothing';
10771077

@@ -1141,7 +1141,7 @@ The ReactPHP `ReadableStreamInterface` gives you access to the incoming
11411141
request body as the individual chunks arrive:
11421142

11431143
```php
1144-
$server = new React\Http\Server(array(
1144+
$server = new React\Http\Server($loop, array(
11451145
new React\Http\Middleware\StreamingRequestMiddleware(),
11461146
function (Psr\Http\Message\ServerRequestInterface $request) {
11471147
$body = $request->getBody();
@@ -1214,7 +1214,7 @@ This method operates on the streaming request body, i.e. the request body size
12141214
may be unknown (`null`) when using `Transfer-Encoding: chunked` for HTTP/1.1 requests.
12151215

12161216
```php
1217-
$server = new React\Http\Server(array(
1217+
$server = new React\Http\Server($loop, array(
12181218
new React\Http\Middleware\StreamingRequestMiddleware(),
12191219
function (Psr\Http\Message\ServerRequestInterface $request) {
12201220
$size = $request->getBody()->getSize();
@@ -1287,7 +1287,7 @@ The `getCookieParams(): string[]` method can be used to
12871287
get all cookies sent with the current request.
12881288

12891289
```php
1290-
$server = new Server(function (ServerRequestInterface $request) {
1290+
$server = new Server($loop, function (ServerRequestInterface $request) {
12911291
$key = 'react\php';
12921292

12931293
if (isset($request->getCookieParams()[$key])) {
@@ -1359,7 +1359,7 @@ but feel free to use any implemantation of the
13591359
`PSR-7 ResponseInterface` you prefer.
13601360

13611361
```php
1362-
$server = new Server(function (ServerRequestInterface $request) {
1362+
$server = new Server($loop, function (ServerRequestInterface $request) {
13631363
return new Response(
13641364
200,
13651365
array(
@@ -1382,7 +1382,7 @@ To prevent this you SHOULD use a
13821382
This example shows how such a long-term action could look like:
13831383

13841384
```php
1385-
$server = new Server(function (ServerRequestInterface $request) use ($loop) {
1385+
$server = new Server($loop, function (ServerRequestInterface $request) use ($loop) {
13861386
return new Promise(function ($resolve, $reject) use ($loop) {
13871387
$loop->addTimer(1.5, function() use ($resolve) {
13881388
$response = new Response(
@@ -1419,7 +1419,7 @@ Note that other implementations of the `PSR-7 ResponseInterface` likely
14191419
only support strings.
14201420

14211421
```php
1422-
$server = new Server(function (ServerRequestInterface $request) use ($loop) {
1422+
$server = new Server($loop, function (ServerRequestInterface $request) use ($loop) {
14231423
$stream = new ThroughStream();
14241424

14251425
$timer = $loop->addPeriodicTimer(0.5, function () use ($stream) {
@@ -1510,7 +1510,7 @@ added automatically. This is the most common use case, for example when using
15101510
a `string` response body like this:
15111511

15121512
```php
1513-
$server = new Server(function (ServerRequestInterface $request) {
1513+
$server = new Server($loop, function (ServerRequestInterface $request) {
15141514
return new Response(
15151515
200,
15161516
array(
@@ -1529,7 +1529,7 @@ response messages will contain the plain response body. If you know the length
15291529
of your streaming response body, you MAY want to specify it explicitly like this:
15301530

15311531
```php
1532-
$server = new Server(function (ServerRequestInterface $request) use ($loop) {
1532+
$server = new Server($loop, function (ServerRequestInterface $request) use ($loop) {
15331533
$stream = new ThroughStream();
15341534

15351535
$loop->addTimer(2.0, function () use ($stream) {
@@ -1608,7 +1608,7 @@ A `Date` header will be automatically added with the system date and time if non
16081608
You can add a custom `Date` header yourself like this:
16091609

16101610
```php
1611-
$server = new Server(function (ServerRequestInterface $request) {
1611+
$server = new Server($loop, function (ServerRequestInterface $request) {
16121612
return new Response(
16131613
200,
16141614
array(
@@ -1622,7 +1622,7 @@ If you don't have a appropriate clock to rely on, you should
16221622
unset this header with an empty string:
16231623

16241624
```php
1625-
$server = new Server(function (ServerRequestInterface $request) {
1625+
$server = new Server($loop, function (ServerRequestInterface $request) {
16261626
return new Response(
16271627
200,
16281628
array(
@@ -1636,7 +1636,7 @@ Note that it will automatically assume a `X-Powered-By: react/alpha` header
16361636
unless your specify a custom `X-Powered-By` header yourself:
16371637

16381638
```php
1639-
$server = new Server(function (ServerRequestInterface $request) {
1639+
$server = new Server($loop, function (ServerRequestInterface $request) {
16401640
return new Response(
16411641
200,
16421642
array(
@@ -1650,7 +1650,7 @@ If you do not want to send this header at all, you can use an empty string as
16501650
value like this:
16511651

16521652
```php
1653-
$server = new Server(function (ServerRequestInterface $request) {
1653+
$server = new Server($loop, function (ServerRequestInterface $request) {
16541654
return new Response(
16551655
200,
16561656
array(
@@ -1723,7 +1723,7 @@ The following example adds a middleware request handler that adds the current ti
17231723
header (`Request-Time`) and a final request handler that always returns a 200 code without a body:
17241724

17251725
```php
1726-
$server = new Server(array(
1726+
$server = new Server($loop, array(
17271727
function (ServerRequestInterface $request, callable $next) {
17281728
$request = $request->withHeader('Request-Time', time());
17291729
return $next($request);
@@ -1747,7 +1747,7 @@ In order to simplify handling both paths, you can simply wrap this in a
17471747
[`Promise\resolve()`](https://reactphp.org/promise/#resolve) call like this:
17481748

17491749
```php
1750-
$server = new Server(array(
1750+
$server = new Server($loop, array(
17511751
function (ServerRequestInterface $request, callable $next) {
17521752
$promise = React\Promise\resolve($next($request));
17531753
return $promise->then(function (ResponseInterface $response) {
@@ -1769,7 +1769,7 @@ handling logic (or logging etc.) by wrapping this in a
17691769
[`Promise`](https://reactphp.org/promise/#promise) like this:
17701770

17711771
```php
1772-
$server = new Server(array(
1772+
$server = new Server($loop, array(
17731773
function (ServerRequestInterface $request, callable $next) {
17741774
$promise = new React\Promise\Promise(function ($resolve) use ($next, $request) {
17751775
$resolve($next($request));
@@ -2404,7 +2404,7 @@ The following example shows how this middleware can be used to ensure no more
24042404
than 10 handlers will be invoked at once:
24052405

24062406
```php
2407-
$server = new Server(array(
2407+
$server = new Server($loop, array(
24082408
new LimitConcurrentRequestsMiddleware(10),
24092409
$handler
24102410
));
@@ -2415,7 +2415,7 @@ Similarly, this middleware is often used in combination with the
24152415
to limit the total number of requests that can be buffered at once:
24162416

24172417
```php
2418-
$server = new Server(array(
2418+
$server = new Server($loop, array(
24192419
new StreamingRequestMiddleware(),
24202420
new LimitConcurrentRequestsMiddleware(100), // 100 concurrent buffering handlers
24212421
new RequestBodyBufferMiddleware(2 * 1024 * 1024), // 2 MiB per request
@@ -2429,7 +2429,7 @@ that can be buffered at once and then ensure the actual request handler only
24292429
processes one request after another without any concurrency:
24302430

24312431
```php
2432-
$server = new Server(array(
2432+
$server = new Server($loop, array(
24332433
new StreamingRequestMiddleware(),
24342434
new LimitConcurrentRequestsMiddleware(100), // 100 concurrent buffering handlers
24352435
new RequestBodyBufferMiddleware(2 * 1024 * 1024), // 2 MiB per request
@@ -2482,7 +2482,7 @@ the total number of concurrent requests.
24822482
Usage:
24832483

24842484
```php
2485-
$server = new Server(array(
2485+
$server = new Server($loop, array(
24862486
new StreamingRequestMiddleware(),
24872487
new LimitConcurrentRequestsMiddleware(100), // 100 concurrent buffering handlers
24882488
new RequestBodyBufferMiddleware(16 * 1024 * 1024), // 16 MiB
@@ -2542,7 +2542,7 @@ $handler = function (ServerRequestInterface $request) {
25422542
);
25432543
};
25442544

2545-
$server = new Server(array(
2545+
$server = new Server($loop, array(
25462546
new StreamingRequestMiddleware(),
25472547
new LimitConcurrentRequestsMiddleware(100), // 100 concurrent buffering handlers
25482548
new RequestBodyBufferMiddleware(16 * 1024 * 1024), // 16 MiB

examples/51-server-hello-world.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
$loop = Factory::create();
1111

12-
$server = new Server(function (ServerRequestInterface $request) {
12+
$server = new Server($loop, function (ServerRequestInterface $request) {
1313
return new Response(
1414
200,
1515
array(

examples/52-server-count-visitors.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
$loop = Factory::create();
1111

1212
$counter = 0;
13-
$server = new Server(function (ServerRequestInterface $request) use (&$counter) {
13+
$server = new Server($loop, function (ServerRequestInterface $request) use (&$counter) {
1414
return new Response(
1515
200,
1616
array(

examples/53-server-whatsmyip.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
$loop = Factory::create();
1111

12-
$server = new Server(function (ServerRequestInterface $request) {
12+
$server = new Server($loop, function (ServerRequestInterface $request) {
1313
$body = "Your IP is: " . $request->getServerParams()['REMOTE_ADDR'];
1414

1515
return new Response(

examples/54-server-query-parameter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
$loop = Factory::create();
1111

12-
$server = new Server(function (ServerRequestInterface $request) {
12+
$server = new Server($loop, function (ServerRequestInterface $request) {
1313
$queryParams = $request->getQueryParams();
1414

1515
$body = 'The query parameter "foo" is not set. Click the following link ';

examples/55-server-cookie-handling.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
$loop = Factory::create();
1111

12-
$server = new Server(function (ServerRequestInterface $request) {
12+
$server = new Server($loop, function (ServerRequestInterface $request) {
1313
$key = 'react\php';
1414

1515
if (isset($request->getCookieParams()[$key])) {

examples/56-server-sleep.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
$loop = Factory::create();
1212

13-
$server = new Server(function (ServerRequestInterface $request) use ($loop) {
13+
$server = new Server($loop, function (ServerRequestInterface $request) use ($loop) {
1414
return new Promise(function ($resolve, $reject) use ($loop) {
1515
$loop->addTimer(1.5, function() use ($resolve) {
1616
$response = new Response(

examples/57-server-error-handling.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
$loop = Factory::create();
1212

1313
$count = 0;
14-
$server = new Server(function (ServerRequestInterface $request) use (&$count) {
14+
$server = new Server($loop, function (ServerRequestInterface $request) use (&$count) {
1515
return new Promise(function ($resolve, $reject) use (&$count) {
1616
$count++;
1717

examples/58-server-stream-response.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
$loop = Factory::create();
1212

13-
$server = new Server(function (ServerRequestInterface $request) use ($loop) {
13+
$server = new Server($loop, function (ServerRequestInterface $request) use ($loop) {
1414
if ($request->getMethod() !== 'GET' || $request->getUri()->getPath() !== '/') {
1515
return new Response(404);
1616
}

examples/59-server-json-api.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
$loop = Factory::create();
1717

18-
$server = new Server(function (ServerRequestInterface $request) {
18+
$server = new Server($loop, function (ServerRequestInterface $request) {
1919
if ($request->getHeaderLine('Content-Type') !== 'application/json') {
2020
return new Response(
2121
415, // Unsupported Media Type

0 commit comments

Comments
 (0)