示例#1
0
文件: server.php 项目: clue/sse-react
    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);
        }
    });
}, 'printf');
$socket->listen(isset($argv[1]) ? $argv[1] : 0, '0.0.0.0');
echo 'Server now listening on http://localhost:' . $socket->getPort() . ' (port is first parameter)' . PHP_EOL;
echo 'Connecting to plain text chat on port ' . $port . ' (port is second parameter)' . PHP_EOL;
$loop->run();