Einführung in Stream in Node.js_node.js
Was ist Flow?
Apropos Streams: Es handelt sich um ein *nix-Konzept: Pipe – In *nix werden Streams in der Shell als Daten implementiert, die über | (Pipe-Zeichen) überbrückt werden können. Die Ausgabe von a Der Prozess (stdout) kann direkt als Eingabe (stdin) des nächsten Prozesses verwendet werden.
In Node ist das Konzept des Streams (Stream) ähnlich und stellt die Fähigkeit eines Datenstroms dar, überbrückt zu werden.
Rohr
Die Essenz des Streamings liegt in der .pipe()-Methode. Die Fähigkeit zur Überbrückung besteht darin, dass beide Enden des Datenstroms (Upstream/Downstream oder Lese-/Schreibstrom) mit einer .pipe()-Methode überbrückt werden.
Die Ausdrucksform des Pseudocodes ist:
//upstream.pipe (downstream)
Readable.pipe(Writable);
Klassifizierung von Streams
Dies ist nicht dazu gedacht, den sogenannten „klassischen“ Ablauf vor Node v0.4 zu diskutieren. Anschließend werden Streams in mehrere Kategorien unterteilt (alle abstrakten Schnittstellen:
).1.stream.Readable Lesbarer Stream (muss die _read-Methode implementieren, der Schwerpunkt liegt auf den Details des Lesens des Datenstroms
2.stream.Writable Beschreibbarer Stream (muss die _write-Methode implementieren, der Schwerpunkt liegt auf den Details des Schreibens des Datenstroms
3.stream.Duplex Lese-/Schreibstream (muss die beiden oben genannten Schnittstellen implementieren, konzentrieren Sie sich auf die Details der beiden oben genannten Schnittstellen
4.stream.Transform Von Duplex geerbt (muss die _transform-Methode implementieren, der Schwerpunkt liegt auf der Verarbeitung von Datenblöcken
Kurz gesagt:
1) Der Besitzer von .pipe() muss über die Fähigkeit „Lesbarer Stream“ (aber nicht darauf beschränkt) verfügen. Es verfügt über eine Reihe von „lesbaren“/„Daten“/„Ende“/„Schließen“/„Fehler“-Ereignissen Das Abonnement bietet auch eine Reihe von Methoden wie .read()/.pause()/.resume() zum Aufrufen;
2) Die Parameter von .pipe() müssen beschreibbare Stream-Funktionen haben (aber nicht beschränkt auf). Es verfügt über „drain“/„pipe“/„unpipe“/„error“/„finish“-Ereignisse für den Zugriff und bietet auch . Für den Aufruf von
stehen write()/.end() und andere Methoden zur Verfügung
Was zum Teufel
Fühlst du dich ein wenig ängstlich? Machen Sie sich keine Sorgen, als Low-Level-Programmierer, der die menschliche Sprache spricht, werde ich Stream auseinandernehmen und mit Ihnen darüber sprechen.Die
Stream-Klasse imNode.js-Quellcode ist wie folgt definiert:
var util = require('util');
util.inherits(Stream, EE);
Funktion Stream() {
EE.call(this);
}
Zum Beispiel gibt es in einem lesbaren Stream ein lesbares Ereignis. In einem pausierten schreibgeschützten Stream wird ein Datenblock an den Abonnenten gesendet (was sind die lesbaren Streams). ? Express) req, req.part der FTP- oder Multi-Form-Upload-Komponente, Standard-Eingabeprozess.stdin im System usw.). Mit dem lesbaren Ereignis können wir ein Tool wie einen Parser erstellen, der die Shell-Befehlsausgabe verarbeitet:
var buf = process.stdin.read();
if(buf){
var data = buf.toString();
// Daten analysieren ... }
});
Appelez comme ceci :
head -10 some.txt | nœud analyseur.js
Pour un flux lisible, nous pouvons également nous abonner à ses données et mettre fin aux événements pour obtenir des morceaux de données et être averti lorsque le flux est épuisé, comme dans l'exemple de socket classique :
req.on('connect', function(res, socket, head) {
socket.on('data', function(morceau) {
console.log(chunk.toString());
});
socket.on('end', function() {
proxy.close();
});
});
Changement d'état du flux lisible
Il est à noter que le flux Readable a deux états : le mode flux (torrent) et le mode pause (pause). Le premier ne peut pas s'arrêter du tout et continuera à nourrir celui qui est redirigé ; le second fera une pause jusqu'à ce que l'aval appelle explicitement la requête Stream.read() pour lire le bloc de données. Le flux Readable est en mode pause lors de son initialisation.
Ces deux états peuvent être commutés entre eux, parmi lesquels,
Si l'un des comportements suivants se produit, la pause deviendra fluide :
1. Ajoutez un abonnement à un événement de données au flux Lisible
2. Appelez .resume() sur Readable pour activer explicitement le flux
3. Appelez .pipe(writable) du flux Readable pour établir un pont vers un flux Writable
Si l'un des comportements suivants se produit, le flux reviendra en pause :
1.Le flux lisible n'a encore été redirigé vers aucun flux, .pause() réglable peut être utilisé pour mettre en pause
2. Le flux Readable a été redirigé vers le flux. Vous devez supprimer tous les abonnements aux événements de données et appeler la méthode .unpipe() pour libérer la relation avec le flux en aval un par un
Utilisation merveilleuse
Combiné aux caractéristiques asynchrones du flux, je peux écrire une application comme celle-ci : relier directement la sortie de l'utilisateur A à la sortie sur la page de l'utilisateur B :
router.post('/post', function(req, res) {
var destination = req.headers['destination']; //À qui envoyer
cache[destination] = req;
//Oui, il ne revient pas, il est donc préférable de faire une requête ajax
});
Lorsque l'utilisateur B demande :
router.get('/inbox', function(req, res){
var utilisateur = req.headers['user'];
cache.find(user, function(err, previousReq){ //Rechercher la demande précédemment enregistrée
var form = new multiparty.Form();
form.parse(previousReq); // Il y a des fichiers pour moi
form.on('part', function (partie) {
part.pipe(res); //La méthode de streaming est bonne :)
part.on('erreur', fonction (erreur) {
console.log(err);
messagerie.setRequestDone(uniqueID);
return res.end(err);
});
});
});
});
Référence
comment écrire des programmes de nœuds avec des flux : stream-handbook

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Der nicht blockierende und ereignisgesteuerte Knotendienst hat den Vorteil eines geringen Speicherverbrauchs und eignet sich sehr gut für die Verarbeitung massiver Netzwerkanforderungen. Unter der Voraussetzung massiver Anfragen müssen Probleme im Zusammenhang mit der „Speicherkontrolle“ berücksichtigt werden. 1. Der Garbage-Collection-Mechanismus und die Speicherbeschränkungen von V8 Js wird von der Garbage-Collection-Maschine gesteuert

Dieser Artikel vermittelt Ihnen ein detailliertes Verständnis des Speichers und Garbage Collectors (GC) der NodeJS V8-Engine. Ich hoffe, er wird Ihnen hilfreich sein!

Das Dateimodul ist eine Kapselung der zugrunde liegenden Dateioperationen, wie z. B. Lesen/Schreiben/Öffnen/Schließen/Löschen von Dateien, Hinzufügen usw. Das größte Merkmal des Dateimoduls besteht darin, dass alle Methoden zwei Versionen von **synchronem** und **bereitstellen. asynchron**, mit Methoden mit dem Suffix sync sind alle Synchronisationsmethoden, und diejenigen ohne sind alle heterogene Methoden.

Der Grund, warum der Knoten den Befehl npm nicht verwenden kann, liegt darin, dass die Umgebungsvariablen nicht richtig konfiguriert sind. Die Lösung ist: 1. Öffnen Sie „Systemeigenschaften“ 2. Suchen Sie nach „Umgebungsvariablen“ -> „Systemvariablen“ und bearbeiten Sie dann die Umgebung Variablen; 3. Suchen Sie den Speicherort des NodeJS-Ordners. 4. Klicken Sie auf „OK“.

Die Ereignisschleife ist ein grundlegender Bestandteil von Node.js und ermöglicht die asynchrone Programmierung, indem sie sicherstellt, dass der Hauptthread nicht blockiert wird. Das Verständnis der Ereignisschleife ist für die Erstellung effizienter Anwendungen von entscheidender Bedeutung. Der folgende Artikel wird Ihnen ein detailliertes Verständnis der Ereignisschleife in Node vermitteln. Ich hoffe, er wird Ihnen hilfreich sein!

Der Stream-Betrieb ist ein Highlight von Java8! Obwohl java.util.stream sehr leistungsfähig ist, gibt es immer noch viele Entwickler, die es selten in der tatsächlichen Arbeit verwenden. Einer der am häufigsten beklagten Gründe ist, dass es zu Beginn schwierig zu debuggen ist, da Streaming-Vorgänge wie z als Stream kann in DEBUG nicht verwendet werden. Wenn es sich um eine Codezeile handelt, werden im nächsten Schritt tatsächlich viele Vorgänge gleichzeitig übergeben, sodass wir schwer beurteilen können, welche Zeile darin das Problem darstellt. Plug-in: JavaStreamDebugger Wenn die von Ihnen verwendete IDEA-Version relativ neu ist, ist dieses Plug-in bereits enthalten und muss nicht installiert werden. Wenn es noch nicht installiert ist, installieren Sie es manuell und fahren Sie dann unten fort.

Zu Beginn lief JS nur auf der Browserseite. Es war einfach, Unicode-codierte Zeichenfolgen zu verarbeiten, aber es war schwierig, binäre und nicht Unicode-codierte Zeichenfolgen zu verarbeiten. Und Binär ist das Datenformat der niedrigsten Ebene des Computer-, Video-/Audio-/Programm-/Netzwerkpakets

Wie verwende ich Node.js für die Entwicklung von Front-End-Anwendungen? Der folgende Artikel führt Sie in die Methode zur Entwicklung von Front-End-Anwendungen in Node ein, die die Entwicklung von Anwendungen auf der Präsentationsebene umfasst. Die Lösung, die ich heute geteilt habe, ist für einfache Szenarien gedacht. Sie soll es Front-End-Entwicklern ermöglichen, einige einfache serverseitige Entwicklungsaufgaben zu erledigen, ohne zu viel Hintergrundwissen und Fachwissen über Node.js beherrschen zu müssen, selbst wenn sie über keine Programmierkenntnisse verfügen Erfahrung.
