protected function handleSse(Request $request, Response $response) { $headers = $request->getHeaders(); $id = isset($headers['Last-Event-ID']) ? $headers['Last-Event-ID'] : null; $response->writeHead(200, array('Content-Type' => 'text/event-stream')); $this->channel->connect($response, $id); $response->on('close', function () use($response) { $this->channel->disconnect($response); }); }
public function testResultingStreamBuffer() { $stream = $this->getMock('React\\Stream\\WritableStreamInterface'); $buffered = ''; $stream->expects($this->any())->method('write')->will($this->returnCallback(function ($data) use(&$buffered) { $buffered .= $data; })); $channel = new BufferedChannel(); // initially nothing $channel->writeMessage('hello', 'world'); $this->assertEquals('', $buffered); // connecting will send messages buffered in channel $channel->connect($stream, 0); $this->assertEquals("id: 0\nevent: world\ndata: hello\n\n", $buffered); }
use React\Stream\Stream; $loop = React\EventLoop\Factory::create(); $socket = new React\Socket\Server($loop); $channel = new BufferedChannel(); $http = new React\Http\Server($socket); $http->on('request', function (Request $request, Response $response) use($channel) { if ($request->getPath() === '/') { $response->writeHead('200', array('Content-Type' => 'text/html')); $response->end(file_get_contents(__DIR__ . '/../01-simple-periodic/eventsource.html')); return; } echo 'connected' . PHP_EOL; $headers = $request->getHeaders(); $id = isset($headers['Last-Event-ID']) ? $headers['Last-Event-ID'] : null; $response->writeHead(200, array('Content-Type' => 'text/event-stream')); $channel->connect($response, $id); $response->on('close', function () use($response, $channel) { echo 'disconnected' . PHP_EOL; $channel->disconnect($response); }); }); $port = isset($argv[2]) ? $argv[2] : 8000; $connector = new TcpConnector($loop); $connector->create('127.0.0.1', $port)->then(function (Stream $stream) use($channel) { $buffer = ''; $stream->on('data', function ($data) use(&$buffer, $channel) { $buffer .= $data; while (($pos = strpos($buffer, "\n")) !== false) { $channel->writeMessage(substr($buffer, 0, $pos)); $buffer = substr($buffer, $pos + 1); }