﻿1
00:00:01,280 --> 00:00:04,030
‫Istruttore: Gli stream sono un altro concetto fondamentale in

2
00:00:04,030 --> 00:00:05,260
‫Node. JS.

3
00:00:05,260 --> 00:00:07,063
‫Quindi ora impariamo tutto su di loro.

4
00:00:08,370 --> 00:00:11,020
‫Quindi, prima di tutto, cosa sono i flussi?

5
00:00:11,020 --> 00:00:15,530
‫Bene, con i flussi possiamo elaborare il significato di leggere e scrivere

6
00:00:15,530 --> 00:00:19,150
‫i dati pezzo per pezzo senza completare l'intera operazione

7
00:00:19,150 --> 00:00:20,760
‫di lettura o scrittura.

8
00:00:20,760 --> 00:00:23,930
‫Pertanto non è necessario mantenere tutti i dati in

9
00:00:23,930 --> 00:00:26,080
‫memoria per eseguire queste operazioni.

10
00:00:26,080 --> 00:00:29,020
‫Ad esempio, quando leggiamo un file utilizzando i flussi,

11
00:00:29,020 --> 00:00:31,990
‫leggiamo parte dei dati, facciamo qualcosa con esso, quindi

12
00:00:31,990 --> 00:00:36,080
‫liberiamo la nostra memoria e ripetiamo l'operazione fino a quando l'intero file non

13
00:00:36,080 --> 00:00:37,510
‫è stato elaborato.

14
00:00:37,510 --> 00:00:39,870
‫Oppure pensa a YouTube o Netflix,

15
00:00:39,870 --> 00:00:42,210
‫che sono entrambe chiamate società

16
00:00:42,210 --> 00:00:45,540
‫di streaming perché trasmettono video utilizzando lo stesso principio.

17
00:00:45,540 --> 00:00:48,940
‫Quindi, invece di attendere il caricamento dell'intero file video, l'elaborazione

18
00:00:48,940 --> 00:00:52,051
‫viene eseguita pezzo per pezzo o in blocchi in

19
00:00:52,051 --> 00:00:55,700
‫modo da poter iniziare a guardare anche prima che l'intero file

20
00:00:55,700 --> 00:00:57,180
‫sia stato scaricato.

21
00:00:57,180 --> 00:01:00,140
‫Quindi il principale qui non riguarda solo Node. JS.

22
00:01:00,140 --> 00:01:03,620
‫Ma universale per l'informatica in generale.

23
00:01:03,620 --> 00:01:07,250
‫Quindi, come puoi vedere, questo rende gli stream il candidato

24
00:01:07,250 --> 00:01:10,490
‫perfetto per gestire grandi volumi di dati come ad

25
00:01:10,490 --> 00:01:14,280
‫esempio video o anche dati che stiamo ricevendo pezzo per pezzo

26
00:01:14,280 --> 00:01:16,250
‫da una fonte esterna.

27
00:01:16,250 --> 00:01:19,270
‫Inoltre, lo streaming rende l'elaborazione dei dati più efficiente in

28
00:01:19,270 --> 00:01:21,960
‫termini di memoria perché non è necessario

29
00:01:21,960 --> 00:01:25,530
‫mantenere tutti i dati in memoria e anche in termini di

30
00:01:25,530 --> 00:01:28,470
‫tempo perché possiamo iniziare a elaborare i dati non

31
00:01:28,470 --> 00:01:31,223
‫appena arrivano, piuttosto che aspettare che arrivi tutto.

32
00:01:32,430 --> 00:01:35,210
‫Ok, ora che sappiamo cosa sono gli stream,

33
00:01:35,210 --> 00:01:37,870
‫parliamo un po' di come sono implementati in

34
00:01:37,870 --> 00:01:39,100
‫Node. JS.

35
00:01:39,100 --> 00:01:43,197
‫Quindi in Node esistono quattro tipi fondamentali di flussi:

36
00:01:43,197 --> 00:01:46,583
‫flussi leggibili, flussi scrivibili, flussi duplex e

37
00:01:46,583 --> 00:01:48,700
‫flussi di trasformazione.

38
00:01:48,700 --> 00:01:50,780
‫Ma quelli leggibili e scrivibili sono

39
00:01:50,780 --> 00:01:52,370
‫i più importanti.

40
00:01:52,370 --> 00:01:55,370
‫E quindi ci concentreremo maggiormente su questi due.

41
00:01:55,370 --> 00:01:58,660
‫Quindi i flussi leggibili sono quelli da cui possiamo leggere.

42
00:01:58,660 --> 00:02:02,410
‫Possiamo consumare dati, ha senso giusto?

43
00:02:02,410 --> 00:02:06,080
‫Ora i flussi sono ovunque nei moduli principali del nodo.

44
00:02:06,080 --> 00:02:09,010
‫Quindi un po' come gli eventi, di cui abbiamo parlato prima.

45
00:02:09,010 --> 00:02:12,490
‫Ad esempio, i dati che arrivano quando un server http

46
00:02:12,490 --> 00:02:15,700
‫riceve una richiesta sono in realtà un flusso leggibile.

47
00:02:15,700 --> 00:02:19,160
‫Quindi tutti i dati che vengono inviati con la richiesta arrivano

48
00:02:19,160 --> 00:02:22,490
‫pezzo per pezzo e non in un pezzo grande.

49
00:02:22,490 --> 00:02:25,270
‫Anche un altro esempio dal file system è che

50
00:02:25,270 --> 00:02:27,867
‫possiamo leggere un file pezzo per pezzo

51
00:02:27,867 --> 00:02:31,170
‫usando una schermata di lettura dal modulo FS, che in

52
00:02:31,170 --> 00:02:35,010
‫realtà può essere molto utile per file di testo di grandi dimensioni.

53
00:02:35,010 --> 00:02:37,400
‫Bene, ora un'altra cosa importante da

54
00:02:37,400 --> 00:02:39,994
‫notare è che i flussi sono in

55
00:02:39,994 --> 00:02:42,320
‫realtà istanze della classe EventEmitter.

56
00:02:42,320 --> 00:02:45,490
‫Ciò significa che tutti i flussi possono emettere e

57
00:02:45,490 --> 00:02:46,730
‫ascoltare eventi denominati.

58
00:02:46,730 --> 00:02:49,530
‫Proprio come abbiamo imparato nell'ultima lezione.

59
00:02:49,530 --> 00:02:52,260
‫Nel caso di flussi leggibili, possono emettere

60
00:02:52,260 --> 00:02:54,710
‫e possiamo ascoltare molti eventi diversi.

61
00:02:54,710 --> 00:02:58,920
‫Ma i due più importanti sono i dati e gli eventi finali.

62
00:02:58,920 --> 00:03:01,660
‫L'evento di dati viene emesso quando c'è una nuova

63
00:03:01,660 --> 00:03:03,020
‫parte di dati da

64
00:03:03,020 --> 00:03:05,710
‫consumare e l'evento di fine viene emesso non appena

65
00:03:05,710 --> 00:03:07,920
‫non ci sono più dati da consumare.

66
00:03:07,920 --> 00:03:09,570
‫E, naturalmente, possiamo quindi reagire

67
00:03:09,570 --> 00:03:11,220
‫di conseguenza a questi eventi.

68
00:03:11,220 --> 00:03:14,670
‫E in effetti lo faremo esattamente nel prossimo video.

69
00:03:14,670 --> 00:03:17,193
‫Quindi, per esercitarti a lavorare con i flussi.

70
00:03:18,170 --> 00:03:21,350
‫Infine, oltre agli eventi, abbiamo anche importanti funzioni che

71
00:03:21,350 --> 00:03:23,050
‫possiamo utilizzare sugli stream.

72
00:03:23,050 --> 00:03:25,110
‫E nel caso di flussi leggibili,

73
00:03:25,110 --> 00:03:28,770
‫i più importanti sono la pipe e le funzioni di lettura.

74
00:03:28,770 --> 00:03:31,760
‫E ancora, li vedrai in azione nel prossimo

75
00:03:31,760 --> 00:03:34,470
‫video, in particolare l'importantissima funzione pipe, che

76
00:03:34,470 --> 00:03:37,520
‫sostanzialmente ci consente di collegare i flussi insieme,

77
00:03:37,520 --> 00:03:39,960
‫passando i dati da un

78
00:03:39,960 --> 00:03:43,040
‫flusso all'altro senza doversi preoccupare molto degli eventi.

79
00:03:43,040 --> 00:03:45,893
‫Ok, il prossimo passo è che i flussi scrivibili sono

80
00:03:45,893 --> 00:03:48,060
‫quelli su cui possiamo scrivere i dati.

81
00:03:48,060 --> 00:03:51,330
‫Quindi, in pratica, l'opposto dei flussi leggibili.

82
00:03:51,330 --> 00:03:55,440
‫Un ottimo esempio è la risposta http che possiamo inviare al client

83
00:03:55,440 --> 00:03:58,530
‫e che in realtà è un flusso scrivibile.

84
00:03:58,530 --> 00:04:01,760
‫Quindi un flusso in cui possiamo scrivere i dati.

85
00:04:01,760 --> 00:04:04,650
‫Quindi, quando vogliamo inviare dati, dobbiamo scriverli da qualche

86
00:04:04,650 --> 00:04:05,483
‫parte, giusto?

87
00:04:05,483 --> 00:04:09,200
‫E da qualche parte c'è un flusso scrivibile, e

88
00:04:09,200 --> 00:04:11,570
‫questo ha perfettamente senso, giusto?

89
00:04:11,570 --> 00:04:14,750
‫Ad esempio, se volessimo inviare un file video di grandi

90
00:04:14,750 --> 00:04:17,182
‫dimensioni a un client, trasmetteremmo quel

91
00:04:17,182 --> 00:04:20,120
‫risultato in streaming proprio come fanno Netflix o YouTube.

92
00:04:20,120 --> 00:04:23,130
‫Ora riguardo agli eventi, i più importanti sono gli

93
00:04:23,130 --> 00:04:25,268
‫eventi di scarico e di arrivo.

94
00:04:25,268 --> 00:04:27,040
‫E le funzioni più importanti

95
00:04:27,040 --> 00:04:29,000
‫sono le funzioni di scrittura e

96
00:04:29,000 --> 00:04:31,850
‫fine, alcune delle quali vedrai in azione nella prossima lezione.

97
00:04:32,720 --> 00:04:34,830
‫Ora rapidamente sui flussi duplex.

98
00:04:34,830 --> 00:04:38,070
‫Sono semplicemente flussi leggibili e scrivibili allo

99
00:04:38,070 --> 00:04:39,530
‫stesso tempo.

100
00:04:39,530 --> 00:04:41,140
‫Questi sono un po' meno comuni.

101
00:04:41,140 --> 00:04:44,320
‫Ma comunque, un buon esempio potrebbe essere un socket

102
00:04:44,320 --> 00:04:45,980
‫web dal modulo net.

103
00:04:45,980 --> 00:04:49,194
‫E un web socket è fondamentalmente solo un

104
00:04:49,194 --> 00:04:53,130
‫canale di comunicazione tra client e server che funziona in entrambe

105
00:04:53,130 --> 00:04:56,840
‫le direzioni e rimane aperto una volta stabilita la connessione.

106
00:04:56,840 --> 00:05:00,191
‫Infine, i flussi di trasformazione sono flussi

107
00:05:00,191 --> 00:05:03,670
‫duplex, quindi flussi leggibili e scrivibili, che allo

108
00:05:03,670 --> 00:05:06,588
‫stesso tempo possono modificare o trasformare

109
00:05:06,588 --> 00:05:09,900
‫i dati mentre vengono letti o scritti.

110
00:05:09,900 --> 00:05:12,970
‫Un buon esempio di questo è il modulo

111
00:05:12,970 --> 00:05:17,250
‫core zlib per comprimere i dati che utilizza effettivamente un flusso di trasformazione.

112
00:05:17,250 --> 00:05:20,220
‫Va bene, e questi sono i quattro tipi

113
00:05:20,220 --> 00:05:23,300
‫di flussi e un'ampia panoramica di come possiamo usarli.

114
00:05:23,300 --> 00:05:25,220
‫Ora c'è qualcosa di importante da

115
00:05:25,220 --> 00:05:26,470
‫menzionare qui prima

116
00:05:26,470 --> 00:05:29,140
‫di andare avanti, il che è un fatto che

117
00:05:29,140 --> 00:05:32,010
‫questi eventi e funzioni che ti ho mostrato sono per

118
00:05:32,010 --> 00:05:34,680
‫consumare flussi che sono già implementati come quelli

119
00:05:34,680 --> 00:05:37,320
‫che ti ho mostrato qui come nostri esempi.

120
00:05:37,320 --> 00:05:41,000
‫Quindi, ad esempio, Node ha implementato queste richieste e risposte

121
00:05:41,000 --> 00:05:42,750
‫http come flussi

122
00:05:42,750 --> 00:05:45,550
‫e noi possiamo quindi consumarli, possiamo usarli

123
00:05:45,550 --> 00:05:48,130
‫usando gli eventi e le funzioni disponibili

124
00:05:48,130 --> 00:05:50,170
‫per ogni tipo di flusso.

125
00:05:50,170 --> 00:05:52,980
‫Ovviamente potremmo anche implementare i nostri

126
00:05:52,980 --> 00:05:56,660
‫flussi e quindi consumarli utilizzando gli stessi eventi e funzioni.

127
00:05:56,660 --> 00:05:59,810
‫Quello, tuttavia, sarebbe un video per un'altra volta perché

128
00:05:59,810 --> 00:06:01,810
‫per creare la maggior parte

129
00:06:01,810 --> 00:06:04,960
‫delle app, è molto importante sapere come consumare effettivamente

130
00:06:04,960 --> 00:06:06,980
‫i flussi, non davvero come implementarli.

131
00:06:06,980 --> 00:06:09,130
‫Bene, ora andiamo avanti e usiamo

132
00:06:09,130 --> 00:06:11,113
‫gli stream nella pratica.

