So verwenden Sie HTML5-Server-Sent-Ereignisse

So verwenden Sie HTML5-Server-Sent-Ereignisse

Zielsetzung

Nach dem Lesen dieses Tutorials sollten Sie in der Lage sein, HTML5-Server-Sent-Ereignisse zu verstehen und zu nutzen.

Anforderungen

  • Keine besonderen Anforderungen erforderlich

Konventionen

  • # - Erfordert, dass der Befehl gegebener Linux entweder mit Root -Berechtigungen ausgeführt werden muss
    direkt als Stammbenutzer oder durch Verwendung von sudo Befehl
  • $ - Der Befehl Linux wird als regelmäßiger nicht privilegierter Benutzer ausgeführt

Einführung

Server-Sent-Ereignisse sind ein HTML5 Technologie, die es einem Client ermöglicht, automatisch Ereignisbenachrichtigungen von einem Server zu überwachen und nach Bedarf zu reagieren. Diese Technologie ist sehr nützlich, um Live -Events zu benachrichtigen, beispielsweise eine Live -Messaging -Anwendung oder einen Newsfeed zu implementieren. In diesem Tutorial werden wir sehen, wie diese Technologie mit PHP und JavaScript implementiert wird.

Ein einfaches Beispiel

Aus diesem Grund werden wir mit einer Liste von „Tieren“ arbeiten, die auf einer einfachen HTML -Seite angezeigt werden. Während in einer realen Anwendung die Daten aus einer Datenbank gespeichert und abgerufen worden wären, werden wir in diesem Fall zum Einfachheit halber ein PHP-Array verwenden. Was wir erhalten möchten, ist eine Echtzeit-Benachrichtigung über die Änderungen in der Tierliste, damit wir unsere HTML-Seite entsprechend aktualisieren können, ohne sie aktualisieren zu müssen.



Der Server -Seitencode

Lassen Sie uns zunächst unsere kleine Auswahl an Tieren in der bevölkern Tiere.Php Datei (wir arbeiten im Stammverzeichnis unseres Webservers virtualHost):

Kopieren

Speichern und schließen Sie die Datei als Tiere.Php. Für den wichtigsten Teil: Wir müssen das Skript schreiben, das die Nachricht ausgibt, die in letzter Zeit von unserem clientseitigen Javascript-Code verwendet wird. Mit viel Fantasie werden wir das Skript benennen Skript.Php. Der Code ist sehr einfach, hier ist er:

Kopieren

Das erste, was wir hier bemerken müssen, ist, dass wir das angerufen haben Header Funktion in Zeilen 2-3: Dies ist eine Funktion, die zum Senden verwendet wird rohe HTTP -Header. In diesem Fall nennen wir es zweimal: die erste in Zeilen 2, um die einzurichten Cache-Kontroll Headerfeld und Geben Sie Caching -Direktiven an (kein Seiten zwischen Seite), die zweite in den Zeilen 3, um die festzulegen Inhaltstyp Zu Text/Ereignisstrom. Diese Header -Setups sind erforderlich, damit unser Skript korrekt funktioniert. Es ist auch wichtig zu bemerken, dass das richtige funktioniert, die Header Die Funktion muss immer aufgerufen werden, bevor eine andere Ausgabe erstellt wird.

Nachdem wir die HTML -Header eingerichtet hatten, haben wir einfach die verwendet einmalig benötigt Anweisung in Zeilen 6, um den Inhalt der zu verlangen Tiere.Php Datei, die das Array enthält, das wir zuvor geschrieben haben. In einem realen Szenario wäre dies durch a ersetzt worden SQL -Abfrage Um solche Informationen aus einer Datenbank abzurufen.

Schließlich haben wir in den Zeilen 9-11 unsere Antwort an den Kunden gesendet: die JSON-codiert "Tiere" Array. Eine sehr wichtige Sache zu bemerken: Server -Side -Ereignis -Format erfordert, dass jede vom Server gesendete Antwort von der vorangestellt wird Daten: Saite und gefolgt von zwei Newline -Charaktere. In diesem Fall haben wir die verwendet \N Newline-Charakter, weil wir auf einer Unix-ähnlichen Plattform laufen; Um die plattformübergreifende Kompatibilität sicherzustellen, hätten wir die verwendet Php_eol Konstante.

Es ist sogar möglich, die Antwortnachricht in mehreren Zeilen zu brechen: In diesem Fall muss jede Zeile, wie bereits gesagt, mit „Daten“ beginnen: und muss von einem einzelnen neuen Zeilenzeichen folgen. Die zusätzliche Newline ist nur in der letzten Zeile erforderlich.

Der Server kann auch steuern, wie oft der Client versuchen sollte, sich wieder zu verbinden 3 Sekunden) und der Name der Fall (Standard ist "Nachricht") an den Client gesendet. Um das erstere anzupassen, müssen wir die verwenden wiederholen Richtlinie gefolgt von dem gewünschten Zeitintervall, ausgedrückt in Millisekunden. Zum Beispiel ein Intervall von 1 Sekunde einrichten:

Echo "RETRY: 1000 \ n";

Beachten Sie, dass selbst hier eine nachfolgende Newline erforderlich ist. Um den Ereignisnamen zu ändern, müssen wir stattdessen die verwenden Fall Richtlinie:

Echo "Ereignis: CustomEvent \ n";

Das Standard -Ereignis ist „Nachricht“: Dies ist wichtig, da das Ereignis beim Hinzufügen des Ereignishörers im Client Javascript -Code angegeben werden muss.

Nachdem wir unsere Antwort gesendet hatten, haben wir das angerufen spülen Funktion: Dies ist erforderlich, um die Daten an den Client zu übergeben.



Client -Seitencode

Das erste, was wir Client -Seite machen, ist die Vorbereitung unserer HTML -Datei mit der Liste der verfügbaren Tiere:

   
Kopieren

Dies ist wirklich ein grundlegendes HTML mit ein wenig PHP, um die Liste der Tiere zum Zeitpunkt des Ladens der Seite anzuzeigen und unsere einzuschließen .JS -Datei (Skript.JS), wird aber unserem Zweck servieren. Lassen Sie uns nun sehen, wie wir tatsächlich Server -Seitenereignisse verwenden können. Das erste, was wir tun müssen, ist, eine zu instanziieren Ereignisquellobjekt. Schreiben Sie in unserer JavaScript -Datei:

Lassen Sie EventSource = New EventSource ('Skript.PHP '); 
Kopieren

Wie Sie sehen können, haben wir den Pfad an unser Serverskript als Argument in der Eventource Objektkonstruktor. Dieses Objekt öffnet eine Verbindung zum Server. Jetzt müssen wir eine hinzufügen Event -Hörer, Damit können wir einige Aktionen ausführen, wenn eine Nachricht vom Server empfangen wird:

Lassen Sie EventSource = New EventSource ('Skript.PHP '); Eventource.AddEventListener ("Nachricht", Funktion (Ereignis) let data = json.analysieren (Ereignis.Daten); Lassen Sie ListElements = Dokument.GetElementsByTagName ("li"); für (lass i = 0; i < listElements.length; i++)  let animal = listElements[i].textContent; if (!data.includes(animal))  listElements[i].style.color = "red";   ); 
Kopieren

Wenn eine Nachricht empfangen wird, verwenden wir die JSON.analysieren Methode in Zeile 4, um die vom Server gesendeten Daten zu transformieren (eine Zeichenfolge, die in der enthalten ist Daten Eigenschaft des Ereignisobjekts) in ein JavaScript -Array.

Danach schleifen wir in den Zeilen 7-11 durch alle Elemente mit dem

  • Tag, die die Elemente unserer Tiereliste sind: Wenn ein Element im Array, der vom Server gesendet wird, nicht mehr zu sein scheint, wird die Farbe des in der Liste enthaltenen Text länger verfügbar (eine bessere Lösung wäre gewesen, nur den geänderten oder fehlenden Elementnamen in die Serverreaktion aufzunehmen, aber unser Ziel ist es jedoch nur, zu demonstrieren, wie die Technologie funktioniert). Die Änderung der Seite erfolgt in Echtzeit, sodass Sie nicht aktualisieren müssen. Sie können beobachten, wie unsere Seite im folgenden Video die Server -Sent -Ereignisse nutzt:

    Wie Sie sehen können, wird das in der HTML -Seite angezeigte Element, sobald die "Katze" aus dem "Tiere" -Array (unsere Datenquelle) entfernt wird, geändert, um diese Änderung widerzuspiegeln.

    Der Datenstrom zwischen dem Server und dem Client kann unter Verwendung des schließen Methode der Eventource Objekt:

    Eventource.schließen()

    Um mit der Verbindung umzugehen offen, Und Fehler Ereignisse, engagierte Ereignishörer können dem Objekt hinzugefügt werden.

    Verwandte Linux -Tutorials:

    • Dinge zu installieren auf Ubuntu 20.04
    • So senden Sie Desktop-Benachrichtigungen mit Benachrichtigungssend
    • So behandeln Sie ACPI -Ereignisse unter Linux
    • So erstellen Sie eine Tkinter -Anwendung mithilfe eines objektorientierten…
    • Eine Einführung in Linux -Automatisierung, Tools und Techniken
    • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
    • Linux -Befehle: Top 20 wichtigste Befehle, die Sie benötigen, um…
    • Grundlegende Linux -Befehle
    • FTP -Clientliste und -installation auf Ubuntu 22.04 Linux…
    • Live CD/DVD Linux Download