-
-
Notifications
You must be signed in to change notification settings - Fork 8
/
simple.php
78 lines (61 loc) · 2.26 KB
/
simple.php
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
77
78
<?php
use Amp\Http\Cookie\CookieAttributes;
use Amp\Http\HttpStatus;
use Amp\Http\Server\DefaultErrorHandler;
use Amp\Http\Server\Request;
use Amp\Http\Server\RequestHandler\ClosureRequestHandler;
use Amp\Http\Server\Response;
use Amp\Http\Server\Session\Session;
use Amp\Http\Server\Session\SessionMiddleware;
use Amp\Http\Server\SocketHttpServer;
use Amp\Log\ConsoleFormatter;
use Amp\Log\StreamHandler;
use Amp\Socket\InternetAddress;
use Monolog\Logger;
use Monolog\Processor\PsrLogMessageProcessor;
use function Amp\ByteStream\getStdout;
use function Amp\Http\Server\Middleware\stackMiddleware;
use function Amp\trapSignal;
require \dirname(__DIR__) . '/vendor/autoload.php';
/*
* Example requires:
*
* ext-pcntl
* amphp/log
* amphp/byte-stream
*/
$logHandler = new StreamHandler(getStdout());
$logHandler->pushProcessor(new PsrLogMessageProcessor());
$logHandler->setFormatter(new ConsoleFormatter());
$logger = new Logger('server');
$logger->pushHandler($logHandler);
$server = SocketHttpServer::createForDirectAccess($logger);
$server->expose(new InternetAddress("0.0.0.0", 1337));
$server->expose(new InternetAddress("[::]", 1337));
$errorHandler = new DefaultErrorHandler();
$requestHandler = new ClosureRequestHandler(
function (Request $request): Response
{
/** @var Session $session */
$session = $request->getAttribute(Session::class);
$counter = $session->get('counter') ?? 0;
// Checking path just so we do not increase on `/favicon.ico` requests.
if ($request->getUri()->getPath() === '/') {
$counter++;
$session->lock();
$session->set('counter', $counter);
$session->commit(); // commits & unlocks
}
$message = 'Hit counters are cool: ' . $counter;
return new Response(HttpStatus::OK, ["content-type" => "text/plain; charset=utf-8"], $message);
}
);
$sessionMiddleware = new SessionMiddleware(
cookieAttributes: CookieAttributes::default()->withExpiry(new \DateTime('+30 minute')),
cookieName: 'my-cookie-name'
);
$middlewareStack = stackMiddleware($requestHandler, $sessionMiddleware);
$server->start($middlewareStack, $errorHandler);
// Await a termination signal to be received.
$signal = trapSignal([\SIGINT, \SIGTERM]);
$server->stop();