diff --git a/README.md b/README.md index bd2fbaab..d3a93ceb 100644 --- a/README.md +++ b/README.md @@ -1426,15 +1426,23 @@ may only support strings. $http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { $stream = new ThroughStream(); + // send some data every once in a while with periodic timer $timer = Loop::addPeriodicTimer(0.5, function () use ($stream) { $stream->write(microtime(true) . PHP_EOL); }); - Loop::addTimer(5, function() use ($timer, $stream) { + // end stream after a few seconds + $timeout = Loop::addTimer(5.0, function() use ($stream, $timer) { Loop::cancelTimer($timer); $stream->end(); }); + // stop timer if stream is closed (such as when connection is closed) + $stream->on('close', function () use ($timer, $timeout) { + Loop::cancelTimer($timer); + Loop::cancelTimer($timeout); + }); + return new React\Http\Message\Response( React\Http\Message\Response::STATUS_OK, array( diff --git a/examples/58-server-stream-response.php b/examples/58-server-stream-response.php index cf65a3bf..9d12461a 100644 --- a/examples/58-server-stream-response.php +++ b/examples/58-server-stream-response.php @@ -18,14 +18,16 @@ $stream->write(microtime(true) . PHP_EOL); }); - // demo for ending stream after a few seconds - Loop::addTimer(5.0, function() use ($stream) { + // end stream after a few seconds + $timeout = Loop::addTimer(5.0, function() use ($stream, $timer) { + Loop::cancelTimer($timer); $stream->end(); }); // stop timer if stream is closed (such as when connection is closed) - $stream->on('close', function () use ($timer) { + $stream->on('close', function () use ($timer, $timeout) { Loop::cancelTimer($timer); + Loop::cancelTimer($timeout); }); return new Response(