‫Instructeur : Les flux sont un autre concept fondamental
‫dans Node. JS.
‫Alors, apprenons maintenant tout à leur sujet.
‫Alors tout d'abord, que sont les streams ?
‫Eh bien, avec les flux, nous pouvons traiter le sens de la lecture
‫et de l'écriture des données pièce par pièce sans terminer l'opération
‫de lecture ou d'écriture.
‫Par conséquent, nous n'avons pas besoin de garder toutes les données
‫en mémoire pour effectuer ces opérations.
‫Par exemple, lorsque nous lisons un fichier à l'aide de
‫flux, nous lisons une partie des données, en faisons quelque
‫chose, puis libérons notre mémoire et répétons cette opération jusqu'à ce que le fichier
‫entier ait été traité.
‫Ou pensez à YouTube ou Netflix, qui sont
‫tous deux appelés sociétés de streaming
‫car ils diffusent des vidéos en utilisant le même principe.
‫Ainsi, au lieu d'attendre le chargement de l'intégralité du fichier vidéo,
‫le traitement est effectué pièce par pièce ou par morceaux
‫afin que vous puissiez commencer à regarder avant même que l'intégralité du
‫fichier n'ait été téléchargée.
‫Donc, le principal ici ne concerne pas seulement Node. JS.
‫Mais universel à l'informatique en général.
‫Comme vous pouvez le voir, cela fait des flux le candidat
‫idéal pour traiter de gros volumes de données comme,
‫par exemple, des vidéos ou également des données que nous recevons pièce
‫par pièce d'une source externe.
‫De plus, le streaming rend le traitement des données plus efficace
‫en termes de mémoire car il n'est pas nécessaire
‫de garder toutes les données en mémoire et également en termes de temps
‫car nous pouvons commencer à traiter les données au fur et
‫à mesure qu'elles arrivent, plutôt que d'attendre que tout arrive.
‫Bon, maintenant que nous savons ce que sont les flux, parlons
‫un peu de la façon dont ils sont implémentés
‫dans Node. JS.
‫Ainsi, dans Node, il existe quatre types fondamentaux de flux :
‫les flux lisibles, les flux inscriptibles, les flux duplex
‫et les flux de transformation.
‫Mais les plus lisibles et inscriptibles
‫sont les plus importants.
‫Et donc nous allons nous concentrer davantage sur ces deux-là.
‫Les flux lisibles sont donc ceux à partir desquels nous pouvons lire.
‫Nous pouvons consommer des données, cela a du sens, non ?
‫Désormais, les flux sont partout dans les modules Node principaux.
‫Donc un peu comme des événements, comme on en a parlé avant.
‫Par exemple, les données qui entrent lorsqu'un serveur http reçoit
‫une requête sont en fait un flux lisible.
‫Ainsi, toutes les données qui sont envoyées avec la demande sont
‫livrées pièce par pièce et non en une seule pièce.
‫Un autre exemple du système de fichiers est que
‫nous pouvons lire un fichier morceau par
‫morceau en utilisant un écran de lecture du module FS, ce
‫qui peut en fait être très utile pour les gros fichiers texte.
‫Très bien, maintenant une autre chose importante à
‫noter est que les flux sont en fait
‫des instances de la classe EventEmitter.
‫Cela signifie que tous les flux peuvent émettre et écouter
‫des événements nommés.
‫Tout comme nous l'avons appris dans la dernière conférence.
‫Dans le cas des flux lisibles, ils peuvent émettre,
‫et nous pouvons écouter de nombreux événements différents.
‫Mais les deux plus importants sont les données et les événements finaux.
‫L'événement de données est émis lorsqu'il y a une
‫nouvelle donnée à
‫consommer et l'événement de fin est émis dès qu'il
‫n'y a plus de données à consommer.
‫Et bien sûr, nous pouvons alors
‫réagir à ces événements en conséquence.
‫Et en fait, nous allons faire exactement cela dans la prochaine vidéo.
‫Donc, pour vous entraîner à travailler avec des flux.
‫Enfin, outre les événements, nous avons également des fonctions importantes que nous
‫pouvons utiliser sur les flux.
‫Et dans le cas des
‫flux lisibles, les plus importants sont les fonctions pipe et read.
‫Et encore une fois, vous les verrez en action dans
‫la prochaine vidéo, en particulier la fonction pipe très
‫importante, qui nous permet essentiellement de connecter des flux ensemble,
‫en passant des données d'un flux à
‫un autre sans avoir à nous soucier du tout des événements.
‫D'accord, ensuite, les flux inscriptibles sont ceux sur
‫lesquels nous pouvons écrire des données.
‫Donc en gros, le contraire des flux lisibles.
‫Un bon exemple est la réponse http que nous pouvons renvoyer au client et
‫qui est en fait un flux accessible en écriture.
‫Donc un flux dans lequel nous pouvons écrire des données.
‫Donc quand on veut envoyer des données, il faut les écrire quelque
‫part, non ?
‫Et ce quelque part est un flux inscriptible, et c'est
‫parfaitement logique, n'est-ce pas ?
‫Par exemple, si nous voulions envoyer un gros fichier
‫vidéo à un client, nous diffuserions
‫ce résultat comme le font Netflix ou YouTube.
‫Concernant les événements, les plus importants sont les
‫événements drain et finish.
‫Et les fonctions les plus importantes
‫sont les fonctions d'écriture et de fin,
‫dont vous verrez certaines en action dans la prochaine leçon.
‫Maintenant rapidement sur les flux duplex.
‫Ce sont simplement des flux qui sont à la
‫fois lisibles et inscriptibles.
‫Ceux-ci sont un peu moins fréquents.
‫Mais de toute façon, un bon exemple serait un socket
‫Web du module net.
‫Et un socket Web n'est fondamentalement qu'un canal
‫de communication entre le client et le serveur qui fonctionne dans
‫les deux sens et reste ouvert une fois la connexion établie.
‫Enfin, les flux de transformation sont des flux duplex, donc
‫des flux à la fois lisibles et inscriptibles, qui peuvent à
‫la fois modifier ou transformer les données
‫au fur et à mesure qu'elles sont lues ou écrites.
‫Un bon exemple de celui-ci est le module de
‫base zlib pour compresser les données qui utilise en fait un flux de transformation.
‫Très bien, et voici les quatre types de flux et
‫un large aperçu de la façon dont nous pouvons les utiliser.
‫Maintenant, il y a quelque chose
‫d'important à mentionner
‫ici avant de continuer, c'est un fait que ces
‫événements et fonctions que je vous ai montrés sont destinés
‫à consommer des flux qui sont déjà implémentés comme
‫ceux que je vous ai montrés ici comme exemples.
‫Ainsi, par exemple, Node a implémenté ces requêtes et réponses http
‫sous forme de flux,
‫et nous pouvons ensuite les consommer, nous pouvons les
‫utiliser en utilisant les événements et les fonctions
‫disponibles pour chaque type de flux.
‫Nous pourrions bien sûr également implémenter nos propres
‫flux, puis les consommer en utilisant ces mêmes événements et fonctions.
‫Ce serait cependant une vidéo pour une autre fois car
‫pour créer la plupart des
‫applications, il est très important de savoir comment consommer réellement
‫les flux, pas vraiment comment les implémenter.
‫Très bien, passons maintenant à autre chose et
‫utilisons réellement les flux dans la pratique.