Eventos enviados pelo servidor e php - o que dispara eventos no servidor?

Todos,

O HTML5 Rocks tem um bom tutorial para iniciantes em Eventos enviados pelo servidor (SSE):

http://www.html5rocks.com/en/tutorials/eventsource/basics/

Mas, eu não entendo um conceito importante - o que dispara o evento no servidor que faz com que uma mensagem seja enviada?

Em outras palavras - no exemplo HTML5 - o servidor simplesmente envia um timestampuma vez:

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); // recommended to prevent caching of event data.
function sendMsg($id, $msg) {
  echo "id: $id" . PHP_EOL;
  echo "data: $msg" . PHP_EOL;
  echo PHP_EOL;
  ob_flush();
  flush();
}
$serverTime = time();
sendMsg($serverTime, 'server time: ' . date("h:i:s", time()));

Se eu estivesse construindo um exemplo prático - por exemplo, um "muro" no estilo do Facebook ou um marcador de ações, no qual o servidor "enviaria" uma nova mensagem ao cliente sempre que algum dado fosse alterado, como isso funciona?

Em outras palavras...O script PHP tem um loop que é executado continuamente, verificando uma alteração nos dados e enviando uma mensagem sempre que encontrar um? Se sim, como você sabe quando encerrar esse processo?

Ou - o script PHP simplesmente envia a mensagem e termina (como parece ser o caso no exemplo HTML5Rocks)? Se sim, como você recebe atualizações contínuas? O navegador simplesmente pesquisa a página do PHP em intervalos regulares? Em caso afirmativo - como é que um "evento enviado pelo servidor"? Como isso é diferente de escrever uma função setInterval em JavaScript que usa AJAX para chamar uma página PHP em um intervalo regular?

Desculpe - esta é provavelmente uma questão incrivelmente ingênua. Mas nenhum dos exemplos que consegui encontrar deixa isso claro.

[ATUALIZAR]

Eu acho que minha pergunta foi mal formulada, então aqui está um pouco de esclarecimento.

Digamos que eu tenha uma página da Web que exiba o preço mais recente das ações da Apple.

Quando o usuário abre a página pela primeira vez, a página cria um EventSource com o URL do meu "stream".

var source = new EventSource('stream.php');

Minha pergunta é esta - como deve funcionar "stream.php"?

Como isso? (pseudo-código):

<?php
    header('Content-Type: text/event-stream');
    header('Cache-Control: no-cache'); // recommended to prevent caching of event data.
    function sendMsg($msg) {
        echo "data: $msg" . PHP_EOL;
        echo PHP_EOL;
        flush();
    }

    while (some condition) {
        // check whether Apple's stock price has changed
        // e.g., by querying a database, or calling a web service
        // if it HAS changed, sendMsg with new price to client
        // otherwise, do nothing (until next loop)
        sleep (n) // wait n seconds until checking again
    }
?>

Em outras palavras - o "stream.php" permanece aberto enquanto o cliente estiver "conectado" a ele?

Em caso afirmativo - isso significa que você tem tantos segmentos executandostream.php como você tem usuários simultâneos? Em caso afirmativo - isso é remotamente viável ou uma maneira apropriada de criar um aplicativo? E como você sabe quando podeFIM uma instância destream.php?

Minha impressão ingênua é que, se esse for o caso, PHPnão é uma tecnologia adequada para este tipo de servidor. Mas todas as demos que vi até agora implicam que o PHP é bom para isso, e é por isso que estou tão confuso ...

questionAnswers(5)

yourAnswerToTheQuestion