IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Comprendre la gestion des flux sous NodeJS


Sujet :

NodeJS

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    dev en formation
    Inscrit en
    Octobre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : dev en formation

    Informations forums :
    Inscription : Octobre 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Comprendre la gestion des flux sous NodeJS
    Hello tout le monde ,

    je viens de découvrir nodeJS et notamment sa gestion de flux est ce que quelqu'un aurait la gentillesse de bien vouloir m'expliquer un peu tout ca ou le cas echeant peut etre mieux rediriger mes recherche sur ce sujet la.

    Merci d'avance pour vos réponse =)

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Quel est ton besoin ?

    C'est pour limiter l'empreinte mémoire parce que tu as de gros fichiers ? Ou bien c'est plutôt pour écrire un service type streaming de vidéo ?

    Ya beaucoup de cas d'utilisation. C'est un peu vaste pour te répondre comme ça de but en blanc.

    Perso j'ai à peine effleuré ce sujet mais l'exemple le plus simple c'est de démarrer avec des fichiers je pense. Cf documentation officielle de node avec readStream et writeStream.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    dev en formation
    Inscrit en
    Octobre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : dev en formation

    Informations forums :
    Inscription : Octobre 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Alors deja merci pour la reponse si rapide,

    effectivement il s'agit bien de flux pour eviter une trop grosse perte de memoire lors de copie de gros fichier par exemple.

    J'ai un peu du mal a comprendre le fonctionnement du processus

  4. #4
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Ça n'est utile qu'avec des gros fichiers (autour de 10mo ça commence à faire des économies), puisque fs.readFile va lire tout le fichier (donc charger une copie du contenu en mémoire) avant de te le mettre à dispo.

    Le principe du stream c'est de lire par séquence et de te mettre le contenu à dispo au fur et à mesure de la lecture.

    Un exemple tout bête :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    'use strict';
     
    const fs = require("fs");
     
    let data = '';
     
    const rs = fs.createReadStream('stream-read-example-file.txt', {encoding: 'utf8', highWaterMark: 1});
     
    rs.on('data', function(chunk) {
        console.log('chunk = ', chunk);
        data += chunk;
    });
     
    rs.on('end',function(){
        console.log("data = ", data);
    });
     
    rs.on('error', function(err){
        console.log(err.stack);
    });
     
    console.log("stream terminé");

    Le fichier stream-read-example-file.txt contient dans mon exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    aaaaa aaaaa aaaaa aaaaa aaaaa
    bbbbb bbbbb bbbbb bbbbb bbbbb
    ccccc ccccc ccccc ccccc ccccc
    Exécute ça ça sera plus clair.

    La propriété de config highWaterMark définit la taille du buffer (du chunk si tu préfères), tu peux l'augmenter pour voir ce qui est logué dans la console. La valeur par défaut est beaucoup plus importante mais pour que ce soit lisible dans cet exemple je l'ai mis à 1 octet.

    EDIT : Tu noteras que le log "stream terminé" est affiché au tout début et non à la fin. Je t'invite à réfléchir au pourquoi !

Discussions similaires

  1. besoin d'aide pour comprendre Example zope
    Par julien.63 dans le forum Zope
    Réponses: 3
    Dernier message: 22/08/2007, 15h41
  2. MVC besoin d'aide pour comprendre
    Par damien77 dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 26/06/2007, 12h17
  3. besoin d'aide pour comprendre un exo simple de java
    Par chadel dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2007, 23h27
  4. [MySQL] besoin d'aide pour comprendre les injections sql
    Par cassy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/01/2007, 14h21
  5. Besoin d aide pour comprendre un code
    Par litlebasic dans le forum Delphi
    Réponses: 4
    Dernier message: 22/06/2006, 13h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo