﻿1
00:00:01,280 --> 00:00:04,030
‫Kursleiter: Streams sind ein weiteres grundlegendes Konzept in

2
00:00:04,030 --> 00:00:05,260
‫Node. JS.

3
00:00:05,260 --> 00:00:07,063
‫Lassen Sie uns nun alles über sie erfahren.

4
00:00:08,370 --> 00:00:11,020
‫Was sind also zunächst Streams?

5
00:00:11,020 --> 00:00:15,530
‫Nun, mit Streams können wir Bedeutungslese- und Schreibdaten Stück

6
00:00:15,530 --> 00:00:19,150
‫für Stück verarbeiten, ohne den gesamten Lese-

7
00:00:19,150 --> 00:00:20,760
‫oder Schreibvorgang abzuschließen.

8
00:00:20,760 --> 00:00:23,930
‫Daher müssen wir nicht alle Daten im Speicher

9
00:00:23,930 --> 00:00:26,080
‫behalten, um diese Operationen durchzuführen.

10
00:00:26,080 --> 00:00:29,020
‫Wenn wir beispielsweise eine Datei mithilfe von Streams

11
00:00:29,020 --> 00:00:31,990
‫lesen, lesen wir einen Teil der Daten, machen etwas

12
00:00:31,990 --> 00:00:36,080
‫damit, geben dann unseren Speicher frei und wiederholen dies, bis die gesamte

13
00:00:36,080 --> 00:00:37,510
‫Datei verarbeitet wurde.

14
00:00:37,510 --> 00:00:39,870
‫Oder denken Sie an YouTube oder

15
00:00:39,870 --> 00:00:42,210
‫Netflix, die beide Streaming-Unternehmen genannt

16
00:00:42,210 --> 00:00:45,540
‫werden, weil sie Videos nach dem gleichen Prinzip streamen.

17
00:00:45,540 --> 00:00:48,940
‫Anstatt also zu warten, bis die gesamte Videodatei geladen ist,

18
00:00:48,940 --> 00:00:52,051
‫erfolgt die Verarbeitung Stück für Stück oder in Blöcken,

19
00:00:52,051 --> 00:00:55,700
‫sodass Sie mit dem Anschauen beginnen können, noch bevor die gesamte

20
00:00:55,700 --> 00:00:57,180
‫Datei heruntergeladen wurde.

21
00:00:57,180 --> 00:01:00,140
‫Hier geht es also nicht nur um Node. JS.

22
00:01:00,140 --> 00:01:03,620
‫Aber universell für die Informatik im Allgemeinen.

23
00:01:03,620 --> 00:01:07,250
‫Wie Sie sehen, sind Streams damit der perfekte Kandidat

24
00:01:07,250 --> 00:01:10,490
‫für die Verarbeitung großer Datenmengen wie beispielsweise

25
00:01:10,490 --> 00:01:14,280
‫Videos oder auch Daten, die wir Stück für Stück von

26
00:01:14,280 --> 00:01:16,250
‫einer externen Quelle erhalten.

27
00:01:16,250 --> 00:01:19,270
‫Außerdem macht Streaming die Datenverarbeitung in Bezug auf den Speicher

28
00:01:19,270 --> 00:01:21,960
‫effizienter, da nicht alle Daten im Speicher

29
00:01:21,960 --> 00:01:25,530
‫gehalten werden müssen, und auch in Bezug auf die Zeit, da

30
00:01:25,530 --> 00:01:28,470
‫wir mit der Verarbeitung der Daten beim Eintreffen beginnen

31
00:01:28,470 --> 00:01:31,223
‫können, anstatt zu warten, bis alles angekommen ist.

32
00:01:32,430 --> 00:01:35,210
‫Okay, jetzt, da wir wissen, was Streams sind, lassen

33
00:01:35,210 --> 00:01:37,870
‫Sie uns ein wenig darüber sprechen, wie sie in

34
00:01:37,870 --> 00:01:39,100
‫Node. JS.

35
00:01:39,100 --> 00:01:43,197
‫In Node gibt es also vier grundlegende Arten

36
00:01:43,197 --> 00:01:46,583
‫von Streams: lesbare Streams, beschreibbare Streams,

37
00:01:46,583 --> 00:01:48,700
‫Duplexstreams und Transformationsstreams.

38
00:01:48,700 --> 00:01:50,780
‫Aber die lesbaren und beschreibbaren

39
00:01:50,780 --> 00:01:52,370
‫sind die wichtigsten.

40
00:01:52,370 --> 00:01:55,370
‫Und deshalb werden wir uns mehr auf diese beiden konzentrieren.

41
00:01:55,370 --> 00:01:58,660
‫Lesbare Streams sind also diejenigen, aus denen wir lesen können.

42
00:01:58,660 --> 00:02:02,410
‫Wir können Daten verbrauchen, macht das Sinn oder?

43
00:02:02,410 --> 00:02:06,080
‫Jetzt sind Streams überall in den Kernmodulen von Node zu finden.

44
00:02:06,080 --> 00:02:09,010
‫Also ein bisschen wie Ereignisse, über die wir vorher gesprochen haben.

45
00:02:09,010 --> 00:02:12,490
‫Beispielsweise sind die Daten, die eintreffen, wenn ein HTTP-Server

46
00:02:12,490 --> 00:02:15,700
‫eine Anfrage erhält, tatsächlich ein lesbarer Stream.

47
00:02:15,700 --> 00:02:19,160
‫Alle Daten, die mit der Anfrage gesendet werden, kommen also

48
00:02:19,160 --> 00:02:22,490
‫Stück für Stück und nicht in einem großen Stück.

49
00:02:22,490 --> 00:02:25,270
‫Ein weiteres Beispiel aus dem Dateisystem ist,

50
00:02:25,270 --> 00:02:27,867
‫dass wir eine Datei Stück für

51
00:02:27,867 --> 00:02:31,170
‫Stück lesen können, indem wir einen Lesebildschirm aus dem

52
00:02:31,170 --> 00:02:35,010
‫FS-Modul verwenden, was für große Textdateien tatsächlich sehr nützlich sein kann.

53
00:02:35,010 --> 00:02:37,400
‫Nun gut, jetzt ist noch eine

54
00:02:37,400 --> 00:02:39,994
‫wichtige Sache zu beachten, dass Streams tatsächlich

55
00:02:39,994 --> 00:02:42,320
‫Instanzen der EventEmitter-Klasse sind.

56
00:02:42,320 --> 00:02:45,490
‫Das bedeutet, dass alle Streams benannte Ereignisse ausgeben und auf

57
00:02:45,490 --> 00:02:46,730
‫sie hören können.

58
00:02:46,730 --> 00:02:49,530
‫So wie wir es in der letzten Vorlesung gelernt haben.

59
00:02:49,530 --> 00:02:52,260
‫Bei lesbaren Streams können sie aussenden, und

60
00:02:52,260 --> 00:02:54,710
‫wir können viele verschiedene Ereignisse anhören.

61
00:02:54,710 --> 00:02:58,920
‫Aber die wichtigsten beiden sind die Daten und die Endereignisse.

62
00:02:58,920 --> 00:03:01,660
‫Das Datenereignis wird ausgegeben, wenn ein neues Datenelement

63
00:03:01,660 --> 00:03:03,020
‫zu konsumieren ist,

64
00:03:03,020 --> 00:03:05,710
‫und das Endereignis wird ausgegeben, sobald keine

65
00:03:05,710 --> 00:03:07,920
‫Daten mehr zu konsumieren sind.

66
00:03:07,920 --> 00:03:09,570
‫Und natürlich können wir dann

67
00:03:09,570 --> 00:03:11,220
‫entsprechend auf diese Ereignisse reagieren.

68
00:03:11,220 --> 00:03:14,670
‫Und genau das werden wir im nächsten Video tun.

69
00:03:14,670 --> 00:03:17,193
‫Um zu üben, wie man mit Streams arbeitet.

70
00:03:18,170 --> 00:03:21,350
‫Schließlich haben wir neben Events auch wichtige Funktionen, die wir

71
00:03:21,350 --> 00:03:23,050
‫auf Streams nutzen können.

72
00:03:23,050 --> 00:03:25,110
‫Und bei lesbaren Streams

73
00:03:25,110 --> 00:03:28,770
‫sind die wichtigsten die Pipe- und die Lesefunktionen.

74
00:03:28,770 --> 00:03:31,760
‫Und diese werden Sie im nächsten Video wieder in

75
00:03:31,760 --> 00:03:34,470
‫Aktion sehen, insbesondere die superwichtige Pipe-Funktion, die

76
00:03:34,470 --> 00:03:37,520
‫es uns im Grunde ermöglicht, Streams zusammenzustecken und Daten

77
00:03:37,520 --> 00:03:39,960
‫von einem Stream zum anderen zu

78
00:03:39,960 --> 00:03:43,040
‫übergeben, ohne sich um große Ereignisse kümmern zu müssen.

79
00:03:43,040 --> 00:03:45,893
‫Okay, als nächstes sind beschreibbare Streams diejenigen, in

80
00:03:45,893 --> 00:03:48,060
‫die wir Daten schreiben können.

81
00:03:48,060 --> 00:03:51,330
‫Also im Grunde das Gegenteil von lesbaren Streams.

82
00:03:51,330 --> 00:03:55,440
‫Ein gutes Beispiel ist die http-Antwort, die wir an den Client zurücksenden

83
00:03:55,440 --> 00:03:58,530
‫können und die eigentlich ein beschreibbarer Stream ist.

84
00:03:58,530 --> 00:04:01,760
‫Also ein Stream, in den wir Daten schreiben können.

85
00:04:01,760 --> 00:04:04,650
‫Wenn wir also Daten senden wollen, müssen wir sie irgendwo

86
00:04:04,650 --> 00:04:05,483
‫hinschreiben, oder?

87
00:04:05,483 --> 00:04:09,200
‫Und das ist irgendwo ein beschreibbarer Stream, und

88
00:04:09,200 --> 00:04:11,570
‫das macht durchaus Sinn, oder?

89
00:04:11,570 --> 00:04:14,750
‫Wenn wir beispielsweise eine große Videodatei an einen

90
00:04:14,750 --> 00:04:17,182
‫Kunden senden wollten, würden wir

91
00:04:17,182 --> 00:04:20,120
‫dieses Ergebnis genauso streamen wie Netflix oder YouTube.

92
00:04:20,120 --> 00:04:23,130
‫Nun zu den Events, die wichtigsten sind

93
00:04:23,130 --> 00:04:25,268
‫die Drain- und Finish-Events.

94
00:04:25,268 --> 00:04:27,040
‫Und die wichtigsten Funktionen sind

95
00:04:27,040 --> 00:04:29,000
‫die Schreib- und Endfunktionen, von denen

96
00:04:29,000 --> 00:04:31,850
‫Sie einige in der nächsten Vorlesung in Aktion sehen werden.

97
00:04:32,720 --> 00:04:34,830
‫Jetzt schnell zu Duplex-Streams.

98
00:04:34,830 --> 00:04:38,070
‫Sie sind einfach Streams, die gleichzeitig lesbar

99
00:04:38,070 --> 00:04:39,530
‫und beschreibbar sind.

100
00:04:39,530 --> 00:04:41,140
‫Diese sind etwas seltener.

101
00:04:41,140 --> 00:04:44,320
‫Ein gutes Beispiel wäre aber trotzdem ein Web-Socket

102
00:04:44,320 --> 00:04:45,980
‫aus dem Netzmodul.

103
00:04:45,980 --> 00:04:49,194
‫Und ein Web-Socket ist im Grunde

104
00:04:49,194 --> 00:04:53,130
‫nur ein Kommunikationskanal zwischen Client und Server, der in

105
00:04:53,130 --> 00:04:56,840
‫beide Richtungen funktioniert und nach dem Verbindungsaufbau offen bleibt.

106
00:04:56,840 --> 00:05:00,191
‫Schließlich sind Transformationsstreams Duplexstreams, also sowohl

107
00:05:00,191 --> 00:05:03,670
‫lesbare als auch schreibbare Streams, die gleichzeitig

108
00:05:03,670 --> 00:05:06,588
‫die Daten beim Lesen

109
00:05:06,588 --> 00:05:09,900
‫oder Schreiben modifizieren oder transformieren können.

110
00:05:09,900 --> 00:05:12,970
‫Ein gutes Beispiel hierfür ist das Kernmodul

111
00:05:12,970 --> 00:05:17,250
‫zlib zum Komprimieren von Daten, das tatsächlich einen Transformationsstream verwendet.

112
00:05:17,250 --> 00:05:20,220
‫In Ordnung, und das sind die vier Arten von

113
00:05:20,220 --> 00:05:23,300
‫Streams und ein breiter Überblick darüber, wie wir sie verwenden können.

114
00:05:23,300 --> 00:05:25,220
‫Nun, hier ist noch etwas Wichtiges

115
00:05:25,220 --> 00:05:26,470
‫zu erwähnen, bevor

116
00:05:26,470 --> 00:05:29,140
‫wir fortfahren, nämlich dass diese Events und Funktionen,

117
00:05:29,140 --> 00:05:32,010
‫die ich Ihnen gezeigt habe, zum Konsumieren von Streams

118
00:05:32,010 --> 00:05:34,680
‫dienen, die bereits implementiert sind, wie die, die

119
00:05:34,680 --> 00:05:37,320
‫ich Ihnen hier als unsere Beispiele gezeigt habe.

120
00:05:37,320 --> 00:05:41,000
‫So hat Node beispielsweise diese HTTP-Anforderungen und -Antworten als

121
00:05:41,000 --> 00:05:42,750
‫Streams implementiert, und

122
00:05:42,750 --> 00:05:45,550
‫wir können sie dann konsumieren und mithilfe

123
00:05:45,550 --> 00:05:48,130
‫der Ereignisse und Funktionen verwenden, die

124
00:05:48,130 --> 00:05:50,170
‫für jeden Stream-Typ verfügbar sind.

125
00:05:50,170 --> 00:05:52,980
‫Wir könnten natürlich auch unsere eigenen Streams

126
00:05:52,980 --> 00:05:56,660
‫implementieren und diese dann mit denselben Events und Funktionen konsumieren.

127
00:05:56,660 --> 00:05:59,810
‫Das wäre jedoch ein Video für ein anderes Mal, denn um

128
00:05:59,810 --> 00:06:01,810
‫die meisten Apps zu erstellen,

129
00:06:01,810 --> 00:06:04,960
‫ist es am wichtigsten zu wissen, wie man Streams tatsächlich

130
00:06:04,960 --> 00:06:06,980
‫konsumiert, nicht wirklich, wie man sie implementiert.

131
00:06:06,980 --> 00:06:09,130
‫In Ordnung, also lassen Sie uns nun weitermachen

132
00:06:09,130 --> 00:06:11,113
‫und Streams in der Praxis verwenden.

