Skip to content

Instantly share code, notes, and snippets.

@mmoreram
Last active May 2, 2020 18:29
Show Gist options
  • Save mmoreram/ef71d05dd8aa507ced312e3391efd917 to your computer and use it in GitHub Desktop.
Save mmoreram/ef71d05dd8aa507ced312e3391efd917 to your computer and use it in GitHub Desktop.
{
"require": {
"react/http": "*",
"symfony/process": "*",
"react/child-process": "*",
"drift/react-functions": "*"
}
}
<?php
$r = fopen('http://localhost:8080', 'r');
sleep(10);
fclose($r);
<?php
namespace App;
use Psr\Http\Message\ServerRequestInterface;
use React\EventLoop\Factory;
use React\EventLoop\TimerInterface;
use React\Http\Response;
use React\Http\Server;
use React\Stream\ThroughStream;
use function Drift\React\wait_for_stream_listeners;
require "vendor/autoload.php";
$loop = Factory::create();
$loop->addPeriodicTimer(1, function() {
gc_collect_cycles();
echo(memory_get_usage() . PHP_EOL);
});
$server = new Server(function (ServerRequestInterface $request) use ($loop) {
$write = new ThroughStream();
wait_for_stream_listeners($write, $loop, 1, 1)
->then(function ($write) use ($loop) {
$pt = $loop->addPeriodicTimer(0.1, function (TimerInterface $timer) use ($write, $loop) {
if (!$write->isWritable()) {
$loop->cancelTimer($timer);
return;
}
$res = $write->write(str_repeat('X', 10000));
var_dump($res);
});
$loop->addTimer(10, function () use ($pt, $loop, $write) {
$loop->cancelTimer($pt);
$write->end();
});
});
return new Response(
200,
array(
'Content-Type' => 'text/plain',
),
$write
);
});
$socket = new \React\Socket\Server(8080, $loop);
$server->listen($socket);
$loop->run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment