‫Kursleiter: Streams sind ein weiteres grundlegendes Konzept in
‫Node. JS.
‫Lassen Sie uns nun alles über sie erfahren.
‫Was sind also zunächst Streams?
‫Nun, mit Streams können wir Bedeutungslese- und Schreibdaten Stück
‫für Stück verarbeiten, ohne den gesamten Lese-
‫oder Schreibvorgang abzuschließen.
‫Daher müssen wir nicht alle Daten im Speicher
‫behalten, um diese Operationen durchzuführen.
‫Wenn wir beispielsweise eine Datei mithilfe von Streams
‫lesen, lesen wir einen Teil der Daten, machen etwas
‫damit, geben dann unseren Speicher frei und wiederholen dies, bis die gesamte
‫Datei verarbeitet wurde.
‫Oder denken Sie an YouTube oder
‫Netflix, die beide Streaming-Unternehmen genannt
‫werden, weil sie Videos nach dem gleichen Prinzip streamen.
‫Anstatt also zu warten, bis die gesamte Videodatei geladen ist,
‫erfolgt die Verarbeitung Stück für Stück oder in Blöcken,
‫sodass Sie mit dem Anschauen beginnen können, noch bevor die gesamte
‫Datei heruntergeladen wurde.
‫Hier geht es also nicht nur um Node. JS.
‫Aber universell für die Informatik im Allgemeinen.
‫Wie Sie sehen, sind Streams damit der perfekte Kandidat
‫für die Verarbeitung großer Datenmengen wie beispielsweise
‫Videos oder auch Daten, die wir Stück für Stück von
‫einer externen Quelle erhalten.
‫Außerdem macht Streaming die Datenverarbeitung in Bezug auf den Speicher
‫effizienter, da nicht alle Daten im Speicher
‫gehalten werden müssen, und auch in Bezug auf die Zeit, da
‫wir mit der Verarbeitung der Daten beim Eintreffen beginnen
‫können, anstatt zu warten, bis alles angekommen ist.
‫Okay, jetzt, da wir wissen, was Streams sind, lassen
‫Sie uns ein wenig darüber sprechen, wie sie in
‫Node. JS.
‫In Node gibt es also vier grundlegende Arten
‫von Streams: lesbare Streams, beschreibbare Streams,
‫Duplexstreams und Transformationsstreams.
‫Aber die lesbaren und beschreibbaren
‫sind die wichtigsten.
‫Und deshalb werden wir uns mehr auf diese beiden konzentrieren.
‫Lesbare Streams sind also diejenigen, aus denen wir lesen können.
‫Wir können Daten verbrauchen, macht das Sinn oder?
‫Jetzt sind Streams überall in den Kernmodulen von Node zu finden.
‫Also ein bisschen wie Ereignisse, über die wir vorher gesprochen haben.
‫Beispielsweise sind die Daten, die eintreffen, wenn ein HTTP-Server
‫eine Anfrage erhält, tatsächlich ein lesbarer Stream.
‫Alle Daten, die mit der Anfrage gesendet werden, kommen also
‫Stück für Stück und nicht in einem großen Stück.
‫Ein weiteres Beispiel aus dem Dateisystem ist,
‫dass wir eine Datei Stück für
‫Stück lesen können, indem wir einen Lesebildschirm aus dem
‫FS-Modul verwenden, was für große Textdateien tatsächlich sehr nützlich sein kann.
‫Nun gut, jetzt ist noch eine
‫wichtige Sache zu beachten, dass Streams tatsächlich
‫Instanzen der EventEmitter-Klasse sind.
‫Das bedeutet, dass alle Streams benannte Ereignisse ausgeben und auf
‫sie hören können.
‫So wie wir es in der letzten Vorlesung gelernt haben.
‫Bei lesbaren Streams können sie aussenden, und
‫wir können viele verschiedene Ereignisse anhören.
‫Aber die wichtigsten beiden sind die Daten und die Endereignisse.
‫Das Datenereignis wird ausgegeben, wenn ein neues Datenelement
‫zu konsumieren ist,
‫und das Endereignis wird ausgegeben, sobald keine
‫Daten mehr zu konsumieren sind.
‫Und natürlich können wir dann
‫entsprechend auf diese Ereignisse reagieren.
‫Und genau das werden wir im nächsten Video tun.
‫Um zu üben, wie man mit Streams arbeitet.
‫Schließlich haben wir neben Events auch wichtige Funktionen, die wir
‫auf Streams nutzen können.
‫Und bei lesbaren Streams
‫sind die wichtigsten die Pipe- und die Lesefunktionen.
‫Und diese werden Sie im nächsten Video wieder in
‫Aktion sehen, insbesondere die superwichtige Pipe-Funktion, die
‫es uns im Grunde ermöglicht, Streams zusammenzustecken und Daten
‫von einem Stream zum anderen zu
‫übergeben, ohne sich um große Ereignisse kümmern zu müssen.
‫Okay, als nächstes sind beschreibbare Streams diejenigen, in
‫die wir Daten schreiben können.
‫Also im Grunde das Gegenteil von lesbaren Streams.
‫Ein gutes Beispiel ist die http-Antwort, die wir an den Client zurücksenden
‫können und die eigentlich ein beschreibbarer Stream ist.
‫Also ein Stream, in den wir Daten schreiben können.
‫Wenn wir also Daten senden wollen, müssen wir sie irgendwo
‫hinschreiben, oder?
‫Und das ist irgendwo ein beschreibbarer Stream, und
‫das macht durchaus Sinn, oder?
‫Wenn wir beispielsweise eine große Videodatei an einen
‫Kunden senden wollten, würden wir
‫dieses Ergebnis genauso streamen wie Netflix oder YouTube.
‫Nun zu den Events, die wichtigsten sind
‫die Drain- und Finish-Events.
‫Und die wichtigsten Funktionen sind
‫die Schreib- und Endfunktionen, von denen
‫Sie einige in der nächsten Vorlesung in Aktion sehen werden.
‫Jetzt schnell zu Duplex-Streams.
‫Sie sind einfach Streams, die gleichzeitig lesbar
‫und beschreibbar sind.
‫Diese sind etwas seltener.
‫Ein gutes Beispiel wäre aber trotzdem ein Web-Socket
‫aus dem Netzmodul.
‫Und ein Web-Socket ist im Grunde
‫nur ein Kommunikationskanal zwischen Client und Server, der in
‫beide Richtungen funktioniert und nach dem Verbindungsaufbau offen bleibt.
‫Schließlich sind Transformationsstreams Duplexstreams, also sowohl
‫lesbare als auch schreibbare Streams, die gleichzeitig
‫die Daten beim Lesen
‫oder Schreiben modifizieren oder transformieren können.
‫Ein gutes Beispiel hierfür ist das Kernmodul
‫zlib zum Komprimieren von Daten, das tatsächlich einen Transformationsstream verwendet.
‫In Ordnung, und das sind die vier Arten von
‫Streams und ein breiter Überblick darüber, wie wir sie verwenden können.
‫Nun, hier ist noch etwas Wichtiges
‫zu erwähnen, bevor
‫wir fortfahren, nämlich dass diese Events und Funktionen,
‫die ich Ihnen gezeigt habe, zum Konsumieren von Streams
‫dienen, die bereits implementiert sind, wie die, die
‫ich Ihnen hier als unsere Beispiele gezeigt habe.
‫So hat Node beispielsweise diese HTTP-Anforderungen und -Antworten als
‫Streams implementiert, und
‫wir können sie dann konsumieren und mithilfe
‫der Ereignisse und Funktionen verwenden, die
‫für jeden Stream-Typ verfügbar sind.
‫Wir könnten natürlich auch unsere eigenen Streams
‫implementieren und diese dann mit denselben Events und Funktionen konsumieren.
‫Das wäre jedoch ein Video für ein anderes Mal, denn um
‫die meisten Apps zu erstellen,
‫ist es am wichtigsten zu wissen, wie man Streams tatsächlich
‫konsumiert, nicht wirklich, wie man sie implementiert.
‫In Ordnung, also lassen Sie uns nun weitermachen
‫und Streams in der Praxis verwenden.