﻿1
00:00:01,280 --> 00:00:04,030
‫Instructeur : Les flux sont un autre concept fondamental

2
00:00:04,030 --> 00:00:05,260
‫dans Node. JS.

3
00:00:05,260 --> 00:00:07,063
‫Alors, apprenons maintenant tout à leur sujet.

4
00:00:08,370 --> 00:00:11,020
‫Alors tout d'abord, que sont les streams ?

5
00:00:11,020 --> 00:00:15,530
‫Eh bien, avec les flux, nous pouvons traiter le sens de la lecture

6
00:00:15,530 --> 00:00:19,150
‫et de l'écriture des données pièce par pièce sans terminer l'opération

7
00:00:19,150 --> 00:00:20,760
‫de lecture ou d'écriture.

8
00:00:20,760 --> 00:00:23,930
‫Par conséquent, nous n'avons pas besoin de garder toutes les données

9
00:00:23,930 --> 00:00:26,080
‫en mémoire pour effectuer ces opérations.

10
00:00:26,080 --> 00:00:29,020
‫Par exemple, lorsque nous lisons un fichier à l'aide de

11
00:00:29,020 --> 00:00:31,990
‫flux, nous lisons une partie des données, en faisons quelque

12
00:00:31,990 --> 00:00:36,080
‫chose, puis libérons notre mémoire et répétons cette opération jusqu'à ce que le fichier

13
00:00:36,080 --> 00:00:37,510
‫entier ait été traité.

14
00:00:37,510 --> 00:00:39,870
‫Ou pensez à YouTube ou Netflix, qui sont

15
00:00:39,870 --> 00:00:42,210
‫tous deux appelés sociétés de streaming

16
00:00:42,210 --> 00:00:45,540
‫car ils diffusent des vidéos en utilisant le même principe.

17
00:00:45,540 --> 00:00:48,940
‫Ainsi, au lieu d'attendre le chargement de l'intégralité du fichier vidéo,

18
00:00:48,940 --> 00:00:52,051
‫le traitement est effectué pièce par pièce ou par morceaux

19
00:00:52,051 --> 00:00:55,700
‫afin que vous puissiez commencer à regarder avant même que l'intégralité du

20
00:00:55,700 --> 00:00:57,180
‫fichier n'ait été téléchargée.

21
00:00:57,180 --> 00:01:00,140
‫Donc, le principal ici ne concerne pas seulement Node. JS.

22
00:01:00,140 --> 00:01:03,620
‫Mais universel à l'informatique en général.

23
00:01:03,620 --> 00:01:07,250
‫Comme vous pouvez le voir, cela fait des flux le candidat

24
00:01:07,250 --> 00:01:10,490
‫idéal pour traiter de gros volumes de données comme,

25
00:01:10,490 --> 00:01:14,280
‫par exemple, des vidéos ou également des données que nous recevons pièce

26
00:01:14,280 --> 00:01:16,250
‫par pièce d'une source externe.

27
00:01:16,250 --> 00:01:19,270
‫De plus, le streaming rend le traitement des données plus efficace

28
00:01:19,270 --> 00:01:21,960
‫en termes de mémoire car il n'est pas nécessaire

29
00:01:21,960 --> 00:01:25,530
‫de garder toutes les données en mémoire et également en termes de temps

30
00:01:25,530 --> 00:01:28,470
‫car nous pouvons commencer à traiter les données au fur et

31
00:01:28,470 --> 00:01:31,223
‫à mesure qu'elles arrivent, plutôt que d'attendre que tout arrive.

32
00:01:32,430 --> 00:01:35,210
‫Bon, maintenant que nous savons ce que sont les flux, parlons

33
00:01:35,210 --> 00:01:37,870
‫un peu de la façon dont ils sont implémentés

34
00:01:37,870 --> 00:01:39,100
‫dans Node. JS.

35
00:01:39,100 --> 00:01:43,197
‫Ainsi, dans Node, il existe quatre types fondamentaux de flux :

36
00:01:43,197 --> 00:01:46,583
‫les flux lisibles, les flux inscriptibles, les flux duplex

37
00:01:46,583 --> 00:01:48,700
‫et les flux de transformation.

38
00:01:48,700 --> 00:01:50,780
‫Mais les plus lisibles et inscriptibles

39
00:01:50,780 --> 00:01:52,370
‫sont les plus importants.

40
00:01:52,370 --> 00:01:55,370
‫Et donc nous allons nous concentrer davantage sur ces deux-là.

41
00:01:55,370 --> 00:01:58,660
‫Les flux lisibles sont donc ceux à partir desquels nous pouvons lire.

42
00:01:58,660 --> 00:02:02,410
‫Nous pouvons consommer des données, cela a du sens, non ?

43
00:02:02,410 --> 00:02:06,080
‫Désormais, les flux sont partout dans les modules Node principaux.

44
00:02:06,080 --> 00:02:09,010
‫Donc un peu comme des événements, comme on en a parlé avant.

45
00:02:09,010 --> 00:02:12,490
‫Par exemple, les données qui entrent lorsqu'un serveur http reçoit

46
00:02:12,490 --> 00:02:15,700
‫une requête sont en fait un flux lisible.

47
00:02:15,700 --> 00:02:19,160
‫Ainsi, toutes les données qui sont envoyées avec la demande sont

48
00:02:19,160 --> 00:02:22,490
‫livrées pièce par pièce et non en une seule pièce.

49
00:02:22,490 --> 00:02:25,270
‫Un autre exemple du système de fichiers est que

50
00:02:25,270 --> 00:02:27,867
‫nous pouvons lire un fichier morceau par

51
00:02:27,867 --> 00:02:31,170
‫morceau en utilisant un écran de lecture du module FS, ce

52
00:02:31,170 --> 00:02:35,010
‫qui peut en fait être très utile pour les gros fichiers texte.

53
00:02:35,010 --> 00:02:37,400
‫Très bien, maintenant une autre chose importante à

54
00:02:37,400 --> 00:02:39,994
‫noter est que les flux sont en fait

55
00:02:39,994 --> 00:02:42,320
‫des instances de la classe EventEmitter.

56
00:02:42,320 --> 00:02:45,490
‫Cela signifie que tous les flux peuvent émettre et écouter

57
00:02:45,490 --> 00:02:46,730
‫des événements nommés.

58
00:02:46,730 --> 00:02:49,530
‫Tout comme nous l'avons appris dans la dernière conférence.

59
00:02:49,530 --> 00:02:52,260
‫Dans le cas des flux lisibles, ils peuvent émettre,

60
00:02:52,260 --> 00:02:54,710
‫et nous pouvons écouter de nombreux événements différents.

61
00:02:54,710 --> 00:02:58,920
‫Mais les deux plus importants sont les données et les événements finaux.

62
00:02:58,920 --> 00:03:01,660
‫L'événement de données est émis lorsqu'il y a une

63
00:03:01,660 --> 00:03:03,020
‫nouvelle donnée à

64
00:03:03,020 --> 00:03:05,710
‫consommer et l'événement de fin est émis dès qu'il

65
00:03:05,710 --> 00:03:07,920
‫n'y a plus de données à consommer.

66
00:03:07,920 --> 00:03:09,570
‫Et bien sûr, nous pouvons alors

67
00:03:09,570 --> 00:03:11,220
‫réagir à ces événements en conséquence.

68
00:03:11,220 --> 00:03:14,670
‫Et en fait, nous allons faire exactement cela dans la prochaine vidéo.

69
00:03:14,670 --> 00:03:17,193
‫Donc, pour vous entraîner à travailler avec des flux.

70
00:03:18,170 --> 00:03:21,350
‫Enfin, outre les événements, nous avons également des fonctions importantes que nous

71
00:03:21,350 --> 00:03:23,050
‫pouvons utiliser sur les flux.

72
00:03:23,050 --> 00:03:25,110
‫Et dans le cas des

73
00:03:25,110 --> 00:03:28,770
‫flux lisibles, les plus importants sont les fonctions pipe et read.

74
00:03:28,770 --> 00:03:31,760
‫Et encore une fois, vous les verrez en action dans

75
00:03:31,760 --> 00:03:34,470
‫la prochaine vidéo, en particulier la fonction pipe très

76
00:03:34,470 --> 00:03:37,520
‫importante, qui nous permet essentiellement de connecter des flux ensemble,

77
00:03:37,520 --> 00:03:39,960
‫en passant des données d'un flux à

78
00:03:39,960 --> 00:03:43,040
‫un autre sans avoir à nous soucier du tout des événements.

79
00:03:43,040 --> 00:03:45,893
‫D'accord, ensuite, les flux inscriptibles sont ceux sur

80
00:03:45,893 --> 00:03:48,060
‫lesquels nous pouvons écrire des données.

81
00:03:48,060 --> 00:03:51,330
‫Donc en gros, le contraire des flux lisibles.

82
00:03:51,330 --> 00:03:55,440
‫Un bon exemple est la réponse http que nous pouvons renvoyer au client et

83
00:03:55,440 --> 00:03:58,530
‫qui est en fait un flux accessible en écriture.

84
00:03:58,530 --> 00:04:01,760
‫Donc un flux dans lequel nous pouvons écrire des données.

85
00:04:01,760 --> 00:04:04,650
‫Donc quand on veut envoyer des données, il faut les écrire quelque

86
00:04:04,650 --> 00:04:05,483
‫part, non ?

87
00:04:05,483 --> 00:04:09,200
‫Et ce quelque part est un flux inscriptible, et c'est

88
00:04:09,200 --> 00:04:11,570
‫parfaitement logique, n'est-ce pas ?

89
00:04:11,570 --> 00:04:14,750
‫Par exemple, si nous voulions envoyer un gros fichier

90
00:04:14,750 --> 00:04:17,182
‫vidéo à un client, nous diffuserions

91
00:04:17,182 --> 00:04:20,120
‫ce résultat comme le font Netflix ou YouTube.

92
00:04:20,120 --> 00:04:23,130
‫Concernant les événements, les plus importants sont les

93
00:04:23,130 --> 00:04:25,268
‫événements drain et finish.

94
00:04:25,268 --> 00:04:27,040
‫Et les fonctions les plus importantes

95
00:04:27,040 --> 00:04:29,000
‫sont les fonctions d'écriture et de fin,

96
00:04:29,000 --> 00:04:31,850
‫dont vous verrez certaines en action dans la prochaine leçon.

97
00:04:32,720 --> 00:04:34,830
‫Maintenant rapidement sur les flux duplex.

98
00:04:34,830 --> 00:04:38,070
‫Ce sont simplement des flux qui sont à la

99
00:04:38,070 --> 00:04:39,530
‫fois lisibles et inscriptibles.

100
00:04:39,530 --> 00:04:41,140
‫Ceux-ci sont un peu moins fréquents.

101
00:04:41,140 --> 00:04:44,320
‫Mais de toute façon, un bon exemple serait un socket

102
00:04:44,320 --> 00:04:45,980
‫Web du module net.

103
00:04:45,980 --> 00:04:49,194
‫Et un socket Web n'est fondamentalement qu'un canal

104
00:04:49,194 --> 00:04:53,130
‫de communication entre le client et le serveur qui fonctionne dans

105
00:04:53,130 --> 00:04:56,840
‫les deux sens et reste ouvert une fois la connexion établie.

106
00:04:56,840 --> 00:05:00,191
‫Enfin, les flux de transformation sont des flux duplex, donc

107
00:05:00,191 --> 00:05:03,670
‫des flux à la fois lisibles et inscriptibles, qui peuvent à

108
00:05:03,670 --> 00:05:06,588
‫la fois modifier ou transformer les données

109
00:05:06,588 --> 00:05:09,900
‫au fur et à mesure qu'elles sont lues ou écrites.

110
00:05:09,900 --> 00:05:12,970
‫Un bon exemple de celui-ci est le module de

111
00:05:12,970 --> 00:05:17,250
‫base zlib pour compresser les données qui utilise en fait un flux de transformation.

112
00:05:17,250 --> 00:05:20,220
‫Très bien, et voici les quatre types de flux et

113
00:05:20,220 --> 00:05:23,300
‫un large aperçu de la façon dont nous pouvons les utiliser.

114
00:05:23,300 --> 00:05:25,220
‫Maintenant, il y a quelque chose

115
00:05:25,220 --> 00:05:26,470
‫d'important à mentionner

116
00:05:26,470 --> 00:05:29,140
‫ici avant de continuer, c'est un fait que ces

117
00:05:29,140 --> 00:05:32,010
‫événements et fonctions que je vous ai montrés sont destinés

118
00:05:32,010 --> 00:05:34,680
‫à consommer des flux qui sont déjà implémentés comme

119
00:05:34,680 --> 00:05:37,320
‫ceux que je vous ai montrés ici comme exemples.

120
00:05:37,320 --> 00:05:41,000
‫Ainsi, par exemple, Node a implémenté ces requêtes et réponses http

121
00:05:41,000 --> 00:05:42,750
‫sous forme de flux,

122
00:05:42,750 --> 00:05:45,550
‫et nous pouvons ensuite les consommer, nous pouvons les

123
00:05:45,550 --> 00:05:48,130
‫utiliser en utilisant les événements et les fonctions

124
00:05:48,130 --> 00:05:50,170
‫disponibles pour chaque type de flux.

125
00:05:50,170 --> 00:05:52,980
‫Nous pourrions bien sûr également implémenter nos propres

126
00:05:52,980 --> 00:05:56,660
‫flux, puis les consommer en utilisant ces mêmes événements et fonctions.

127
00:05:56,660 --> 00:05:59,810
‫Ce serait cependant une vidéo pour une autre fois car

128
00:05:59,810 --> 00:06:01,810
‫pour créer la plupart des

129
00:06:01,810 --> 00:06:04,960
‫applications, il est très important de savoir comment consommer réellement

130
00:06:04,960 --> 00:06:06,980
‫les flux, pas vraiment comment les implémenter.

131
00:06:06,980 --> 00:06:09,130
‫Très bien, passons maintenant à autre chose et

132
00:06:09,130 --> 00:06:11,113
‫utilisons réellement les flux dans la pratique.

