Maison interface Web js tutoriel Une brève analyse de l'utilisation de l'API Stream dans Node.js_node.js

Une brève analyse de l'utilisation de l'API Stream dans Node.js_node.js

May 16, 2016 pm 03:35 PM

Cet article vous présente l'API de flux node.js du moins profond au plus profond. Veuillez voir ci-dessous pour des détails spécifiques.

Introduction de base

Dans Node.js, il existe deux façons de lire des fichiers, l'une consiste à utiliser fs.readFile, l'autre consiste à utiliser fs.createReadStream pour lire.

fs.readFile est le plus familier à tous les utilisateurs de Node.js. Il est simple à comprendre et à utiliser. Mais son inconvénient est que toutes les données seront d'abord lues dans la mémoire. Lorsqu'un fichier volumineux est rencontré, l'efficacité de cette lecture est très faible.

Et fs.createReadStream lit les données via Stream. Il divise le fichier (données) en petits morceaux puis déclenche certains événements spécifiques. Nous pouvons écouter ces événements et écrire des fonctions de traitement spécifiques. Cette méthode n’est pas simple à utiliser par rapport à la précédente, mais elle est très efficace.

En fait, Stream n'est pas seulement utilisé pour le traitement de fichiers dans Node.js, il peut également être vu à d'autres endroits, tels que process.stdin/stdout, http, sockets TCP, zlib, crypto, etc.

Cet article est un résumé de mon apprentissage sur l'API Stream dans Node.js. J'espère qu'il sera utile à tout le monde.

Caractéristiques

Communication événementielle

Vous pouvez connecter des flux via un tuyau

Tapez

Flux de données lisible Readable Stream

Flux de données inscriptible Streamable

Duplex Stream est un flux de données bidirectionnel qui peut lire et écrire en même temps

Transform Stream convertit les flux de données, qui peuvent être lus et écrits, et peut également convertir (traiter) des données

Événement

Événements pour flux de données lisibles

déclencheurs lisibles lorsque les données sortent

données Pour les flux de données qui ne sont pas explicitement mis en pause, ajoutez la fonction d'écoute des événements de données, qui fera basculer le flux de données vers la dynamique du flux et fournira des données à l'extérieur dès que possible

end est déclenché lorsque les données sont lues. Notez qu'il ne peut pas être confondu avec writeableStream.end() n'a pas d'événement de fin, seulement la méthode .end()

.

déclencheurs de fermeture lorsque la source de données est fermée

erreur déclenchée lorsqu'une erreur se produit lors de la lecture des données

Événements de flux de données inscriptibles

drain writable.write(chunk) renvoie false Une fois que tout le cache est écrit, il sera déclenché lorsqu'il pourra être à nouveau écrit

Lorsque finish appelle la méthode .end, elle est déclenchée une fois que toutes les données mises en cache sont libérées, similaire à l'événement end dans le flux de données lisible, indiquant la fin du processus d'écriture

Déclenché lorsque le tuyau est utilisé comme cible du tuyau

unpipe Déclenché lorsque unpipe est la cible

erreur déclenchée lorsqu'une erreur se produit lors de l'écriture de données

Statut

Le flux de données lisible a deux états : l'état dynamique du flux et l'état de pause. La méthode pour modifier l'état du flux de données est la suivante :

Statut de pause -> Statut de diffusion

Ajouter une fonction d'écoute pour l'événement de données

Méthode de reprise d'appel

Appelez la méthode pipe

Remarque : s'il n'y a pas de fonction d'écoute pour l'événement de données ni de destination pour la méthode pipe lors de la conversion en dynamique de streaming, les données seront perdues.

Statut du streaming -> Statut de pause

Lorsque la destination de la méthode pipe n'existe pas, la méthode pause est appelée

Lorsqu'il existe une destination pour la méthode pipe, supprimez toutes les fonctions d'écoute des événements de données et appelez la méthode unpipe pour supprimer toutes les destinations de la méthode pipe

Remarque : seule la suppression de la fonction d'écoute de l'événement de données ne fera pas automatiquement passer le flux de données à « l'état de pause ». De plus, l'appel de la méthode pause lorsqu'il existe des destinations de la méthode pipe ne garantit pas que le flux de données est toujours mis en pause une fois que ces destinations émettent des demandes de données, le flux de données peut continuer à fournir des données.

Utilisation

Lire et écrire des fichiers

var fs = require('fs');
// 新建可读数据流
var rs = fs.createReadStream('./test1.txt');
// 新建可写数据流
var ws = fs.createWriteStream('./test2.txt');
// 监听可读数据流结束事件
rs.on('end', function() {
 console.log('read text1.txt successfully!');
});
// 监听可写数据流结束事件
ws.on('finish', function() {
 console.log('write text2.txt successfully!');
});
// 把可读数据流转换成流动态,流进可写数据流中
rs.pipe(ws);
读取 CSV 文件,并上传数据(我在生产环境中写过)
var fs = require('fs');
var es = require('event-stream');
var csv = require('csv');
var parser = csv.parse();
var transformer = csv.transform(function(record) {
 return record.join(',');
});
var data = fs.createReadStream('./demo.csv');
data
 .pipe(parser)
 .pipe(transformer)
 // 处理前一个 stream 传递过来的数据
 .pipe(es.map(function(data, callback) {
  upload(data, function(err) {
   callback(err);
  });
 }))
 // 相当于监听前一个 stream 的 end 事件
 .pipe(es.wait(function(err, body) {
  process.stdout.write('done!');
 }));
Copier après la connexion

Plus d'utilisation

Vous pouvez vous référer à https://github.com/jeresig/node-stream-playground Après avoir accédé à l'exemple de site Web, cliquez directement sur Ajouter un flux pour voir les résultats.

Pièges courants

L'utilisation de rs.pipe(ws) pour écrire des fichiers n'ajoute pas le contenu de rs à l'arrière de ws, mais écrase directement le contenu original de ws par le contenu de rs

Les flux terminés/fermés ne peuvent pas être réutilisés et le flux de données doit être recréé

La méthode pipe renvoie le flux de données cible, par exemple, a.pipe(b) renvoie b, donc lorsque vous écoutez des événements, veuillez faire attention à savoir si l'objet que vous surveillez est correct

Si vous souhaitez surveiller plusieurs flux de données et que vous utilisez la méthode pipe pour connecter les flux de données en série, vous devez écrire :

données

.on('end', function() {
 console.log('data end');
})
.pipe(a)
.on('end', function() {
 console.log('a end');
})
.pipe(b)
.on('end', function() {
 console.log('b end');
});
Copier après la connexion

Bibliothèques de classes couramment utilisées

Event-stream ressemble à une programmation fonctionnelle lorsqu'il est utilisé, ce que j'aime personnellement

awesome-nodejs#streams Puisque je n'ai jamais utilisé d'autres bibliothèques de flux, donc si vous en avez besoin, regardez ici

Le contenu ci-dessus est l'utilisation de l'API Stream dans Node.js introduite par l'éditeur. J'espère qu'il vous plaira.

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
4 Il y a quelques semaines By DDD
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Remplacer les caractères de chaîne en javascript Remplacer les caractères de chaîne en javascript Mar 11, 2025 am 12:07 AM

Explication détaillée de la méthode de remplacement de la chaîne JavaScript et de la FAQ Cet article explorera deux façons de remplacer les caractères de chaîne dans JavaScript: le code JavaScript interne et le HTML interne pour les pages Web. Remplacer la chaîne dans le code JavaScript Le moyen le plus direct consiste à utiliser la méthode Remplace (): str = str.replace ("trouver", "remplacer"); Cette méthode remplace uniquement la première correspondance. Pour remplacer toutes les correspondances, utilisez une expression régulière et ajoutez le drapeau global G: str = str.replace (/ fi

8 Superbes plugins de mise en page JQuery Page 8 Superbes plugins de mise en page JQuery Page Mar 06, 2025 am 12:48 AM

Tirez parti de jQuery pour les dispositions de page Web sans effort: 8 plugins essentiels JQuery simplifie considérablement la mise en page de la page Web. Cet article met en évidence huit puissants plugins jQuery qui rationalisent le processus, particulièrement utile pour la création de sites Web manuels

Créez vos propres applications Web Ajax Créez vos propres applications Web Ajax Mar 09, 2025 am 12:11 AM

Vous voici donc, prêt à tout savoir sur cette chose appelée Ajax. Mais qu'est-ce que c'est exactement? Le terme Ajax fait référence à un regroupement lâche de technologies utilisées pour créer un contenu Web interactif dynamique. Le terme Ajax, inventé à l'origine par Jesse J

10 JQUERY FUN ET PLIGINS DE GAMES 10 JQUERY FUN ET PLIGINS DE GAMES Mar 08, 2025 am 12:42 AM

10 plugins de jeu JQuery amusants pour rendre votre site Web plus attrayant et améliorer l'adhérence des utilisateurs! Bien que Flash soit toujours le meilleur logiciel pour développer des jeux Web occasionnels, JQuery peut également créer des effets surprenants, et bien qu'il ne soit pas comparable aux jeux Flash Pure Action, dans certains cas, vous pouvez également vous amuser inattendu dans votre navigateur. jeu jquery tic toe Le "Hello World" de la programmation de jeux a désormais une version jQuery. Code source JQUERY Crazy Word Composition Game Il s'agit d'un jeu de remplissage, et il peut produire des résultats étranges en raison de ne pas connaître le contexte du mot. Code source Jeu de balayage de la mine jQuery

Comment créer et publier mes propres bibliothèques JavaScript? Comment créer et publier mes propres bibliothèques JavaScript? Mar 18, 2025 pm 03:12 PM

L'article discute de la création, de la publication et du maintien des bibliothèques JavaScript, en se concentrant sur la planification, le développement, les tests, la documentation et les stratégies de promotion.

Tutoriel JQuery Parallax - Contexte d'en-tête animé Tutoriel JQuery Parallax - Contexte d'en-tête animé Mar 08, 2025 am 12:39 AM

Ce tutoriel montre comment créer un effet de fond de parallaxe captivant à l'aide de jQuery. Nous allons construire une bannière d'en-tête avec des images en couches qui créent une profondeur visuelle étonnante. Le plugin mis à jour fonctionne avec jQuery 1.6.4 et plus tard. Télécharger le

Comment rédiger une bibliothèque de session sans cookie pour JavaScript Comment rédiger une bibliothèque de session sans cookie pour JavaScript Mar 06, 2025 am 01:18 AM

Cette bibliothèque JavaScript exploite la propriété Window.Name pour gérer les données de session sans compter sur les cookies. Il offre une solution robuste pour stocker et récupérer des variables de session à travers les navigateurs. La bibliothèque fournit trois méthodes de base: Session

Chargez le contenu de la boîte dynamiquement à l'aide de AJAX Chargez le contenu de la boîte dynamiquement à l'aide de AJAX Mar 06, 2025 am 01:07 AM

Ce didacticiel montre la création de boîtes de page dynamiques chargées via AJAX, permettant un actualisation instantanée sans rechargement de page pleine. Il exploite JQuery et JavaScript. Considérez-le comme un chargeur de boîtes de contenu de style Facebook personnalisé. Concepts clés: Ajax et jQuery

See all articles