Vom Server gesendete Ereignisse und PHP - Was löst Ereignisse auf dem Server aus?

Alles,

HTML5 Rocks hat ein nettes Tutorial für Anfänger zu Server-Sent Events (SSE):

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

Aber ich verstehe kein wichtiges Konzept - was löst das Ereignis auf dem Server aus, das das Senden einer Nachricht verursacht?

Mit anderen Worten, im HTML5-Beispiel sendet der Server einfach einen ZeitstempelEinmal:

<?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()));

Wenn ich ein praktisches Beispiel erstellen würde - z. B. eine "Pinnwand" im Facebook-Stil oder einen Börsenticker, bei dem der Server bei jeder Datenänderung eine neue Nachricht an den Client "pushen" würde, wie funktioniert das?

Mit anderen Worten...Verfügt das PHP-Skript über eine Schleife, die kontinuierlich ausgeführt wird, nach Änderungen in den Daten sucht und jedes Mal eine Nachricht sendet, wenn sie eine findet? Wenn ja - woher wissen Sie, wann Sie diesen Prozess beenden müssen?

Oder - sendet das PHP-Skript einfach die Nachricht und beendet sie dann (wie es im HTML5Rocks-Beispiel der Fall zu sein scheint)? Wenn ja - wie erhalten Sie kontinuierliche Updates? Ruft der Browser einfach in regelmäßigen Abständen die PHP-Seite ab? Wenn ja - wie ist das ein "vom Server gesendetes Ereignis"? Wie unterscheidet sich dies vom Schreiben einer setInterval-Funktion in JavaScript, die mit AJAX in regelmäßigen Abständen eine PHP-Seite aufruft?

Entschuldigung - das ist wahrscheinlich eine unglaublich naive Frage. Aber keines der Beispiele, die ich finden konnte, macht dies deutlich.

[AKTUALISIEREN]

Ich glaube, meine Frage war schlecht formuliert, deshalb hier einige Erläuterungen.

Angenommen, ich habe eine Webseite, auf der der aktuelle Kurs der Apple-Aktie angezeigt werden soll.

Wenn der Benutzer die Seite zum ersten Mal öffnet, erstellt die Seite eine EventSource mit der URL meines "Streams".

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

Meine Frage ist: Wie soll "stream.php" funktionieren?

So was? (Pseudocode):

<?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
    }
?>

Mit anderen Worten - bleibt "stream.php" geöffnet, solange der Client "verbunden" ist?

Wenn ja - bedeutet das, dass so viele Threads ausgeführt werdenstream.php Wie haben Sie gleichzeitige Benutzer? Wenn ja - ist dies aus der Ferne möglich oder eine geeignete Methode zum Erstellen einer Anwendung? Und woher weißt du, wann du kannst?ENDE eine Instanz vonstream.php?

Mein naiver Eindruck ist, dass, wenn dies der Fall ist, PHPist nicht eine geeignete Technologie für diese Art von Server. Aber alle Demos, die ich bisher gesehen habe, deuten darauf hin, dass PHP dafür in Ordnung ist, weshalb ich so verwirrt bin ...

Antworten auf die Frage(5)

Ihre Antwort auf die Frage