Vom Server gesendete Ereignisse und php - was löst Ereignisse auf dem Server aus?

Alle,

HTML5 Rocks hat ein schönes Anfänger-tutorial auf Server-sent-Events (SSE):

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

Aber, ich verstehe nicht, ein wichtiges Konzept, das - was löst das Ereignis auf dem server, der bewirkt, dass eine Nachricht gesendet werden?

In anderen Worten - in der HTML5-Beispiel - der server sendet einen timestamp einmal:

<?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 Gebäude ein praktisches Beispiel, z.B. ein Facebook-Stil "Wand" oder ein Aktien-ticker, in dem der server ein "push" eine neue Nachricht an den client jedes mal ein Stück von Datenänderungen, wie funktioniert das?

In anderen Worten... Funktioniert das PHP-Skript eine Schleife, die kontinuierlich läuft, prüft eine änderung der Daten, dann das senden einer Nachricht jedes mal, wenn er eine findet? Wenn ja, wie wollen Sie wissen, Wann Sie zu Ende dieses Prozesses?

Oder - macht das PHP-script senden Sie einfach die Nachricht, dann Ende, (wie der Fall zu sein scheint, in der HTML5Rocks Beispiel)? Wenn ja - wie bekommen Sie kontinuierliche updates? Ist der browser einfach polling die PHP-Seite in regelmäßigen Abständen? Wenn ja - wie ist das ein "server-sent-event"? Wie unterscheidet er sich vom schreiben einer setInterval-Funktion in JavaScript, die verwendet AJAX-Aufruf eine PHP-Seite, die in regelmäßigen Abständen?

Sorry - das ist wahrscheinlich eine unglaublich naive Frage. Aber keines der Beispiele habe ich in der Lage zu finden, machen dies deutlich.

[UPDATE]

Ich denke, meine Frage war schlecht formuliert, deshalb hier einige Klarstellungen.

Sagen wir mal ich habe eine web-Seite, die sollte dir die neueste Preis der Apple-Aktie.

Wenn der Benutzer die Seite öffnet, wird die Seite schafft eine EventSource, die mit der URL von meinem "Bach."

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

Meine Frage ist - wie sollen "stream.php" Arbeit?

So? (pseudo-code):

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

In anderen Worten - tut "stream.php" bleiben so lange offen, wie der client "connected"?

Wenn dem so ist - bedeutet das, dass Sie so viele threads stream.php wie Sie gleichzeitige Nutzer? Wenn dem so ist - ist das aus der Ferne machbar, oder eine geeignete Weg, um eine Anwendung zu erstellen? Und wie wissen Sie, wenn Sie können ENDE eine Instanz von stream.php?

Meiner naiven Eindruck ist, dass, wenn dies der Fall ist, PHP nicht eine geeignete Technologie für diese Art von server. Aber alle demos die ich bisher gesehen habe, bedeuten, dass PHP gerade für diese feine, das ist, warum ich bin so verwirrt...

InformationsquelleAutor der Frage mattstuehler | 2013-01-28

Schreibe einen Kommentar