suchen
HeimWeb-Frontendjs-TutorialLassen Sie uns über das Kernmodul in Nodejs sprechen: Stream-Modul (sehen Sie, wie man es verwendet)

Dieser Artikel vermittelt Ihnen ein detailliertes Verständnis des Stream-Moduls in Nodejs und stellt das Konzept und die Verwendung von Streams vor. Ich hoffe, dass er für alle hilfreich ist! Das

Lassen Sie uns über das Kernmodul in Nodejs sprechen: Stream-Modul (sehen Sie, wie man es verwendet)

Stream-Modul ist ein Kernmodul in Node. Andere Module wie fs, http usw. basieren auf Instanzen des Stream-Moduls.

Wenn die meisten Front-End-Neulinge zum ersten Mal mit Node beginnen, haben sie immer noch kein klares Verständnis des Konzepts und der Verwendung von Streams, da es im Front-End anscheinend nur sehr wenige Anwendungen im Zusammenhang mit der „Stream“-Verarbeitung gibt -Ende der Arbeit.

1. Flow, was ist das?

Mit dem einfachen Wort „fließen“ können wir leicht die Konzepte von Wasserfluss, Fluss usw. verstehen.

Offizielle Definition: Stream ist eine abstrakte Schnittstelle zur Verarbeitung von Stream-Daten in Node.js

Aus der offiziellen Definition können wir sehen:

  • Stream ist eine vom Node Tool bereitgestellte Datenverarbeitungsmethode abstrakte Schnittstelle im Knoten
  • Genau genommen kann Stream als Datenstrom verstanden werden, was ein Mittel zum Übertragen von Daten in einer Anwendung ist. Stream ist ein geordneter Datenfluss mit einem Startpunkt und einem Endpunkt.

Der Hauptgrund, warum wir Stream nicht gut verstehen, ist, dass es sich um ein abstraktes Konzept handelt. 数据流,它是一种用来传输数据的手段,在一个应用程序中,流,是一种有序的,有起点和终点的数据流。

造成我们对stream流不太好的理解的主要原因就是,它是一种抽象的概念。

2. 流,的具体使用场景

为了让我们能够清楚的理解stream模块,我们首先来以具体的应用场景来说明stream模块有哪些实际应用之处。

stream流,在Node中主要应用在大量数据处理的需求上,如fs对大文件的读取和写入、http请求响应、文件的压缩、数据的加密/解密等应用。

Lassen Sie uns über das Kernmodul in Nodejs sprechen: Stream-Modul (sehen Sie, wie man es verwendet)

我们以上面的图片说明流的使用,水桶可以理解为数据源,水池可以理解为数据目标,中间连接的管道,我们可以理解为数据流,通过数据流管道,数据从数据源流向数据目标。

3. 流的分类

在Node中,流被分为4类:可读流,可写流,双工流,转换流。

  • Writable: 可以写入数据的流
  • Readable: 可以从中读取数据的流
  • DuplexReadable 和 Writable 的流
  • Transform: 可以在写入和读取数据时修改或转换数据的 Duplex 流

所有的流都是 EventEmitter 的实例。即我们可以通过事件机制监听数据流的变化。

4. 数据模式和缓存区

在深入学习4类流的具体使用之前,我们需要理解两个概念数据模式缓存区,有助于我们在接下来流的学习中更好的理解。

4.1 数据模式

Node.js API 创建的所有流都只对字符串和 Buffer(或 Uint8Array)对象进行操作。

4.2 缓存区

Writable和 Readable

2. Spezifische Nutzungsszenarien von Streams🎜🎜Damit wir das Stream-Modul klar verstehen, erläutern wir zunächst anhand konkreter Anwendungsszenarien die praktischen Anwendungen des Stream-Moduls. 🎜🎜stream wird in Node hauptsächlich für große Datenmengen-Verarbeitungsanforderungen verwendet, wie z. B. das Lesen und Schreiben großer Dateien durch FS, die Antwort auf HTTP-Anfragen, die Dateikomprimierung sowie die Datenverschlüsselung/-entschlüsselung und andere Anwendungen . 🎜🎜Lassen Sie uns über das Kernmodul in Nodejs sprechen: Stream-Modul (sehen Sie, wie man es verwendet)🎜🎜uns Das obige Bild veranschaulicht die Verwendung von Streams. Der Bucket kann als Datenquelle verstanden werden, der Pool kann als Datenziel verstanden werden und die Pipe, die in der Mitte verbindet Als Datenstrom verstanden, fließen Daten über die Datenflusspipeline von der Datenquelle zum Datenziel. 🎜🎜3. Klassifizierung von Streams🎜🎜In Node sind Streams in 4 Kategorien unterteilt: lesbarer Stream, beschreibbarer Stream, Duplex-Stream und Konvertierungs-Stream. 🎜🎜🎜Writable🎜: Ein Stream, der Daten schreiben kann🎜🎜Readable🎜: Ein Stream, aus dem Daten gelesen werden können🎜🎜Duplex🎜: Lesbar und Schreibbar Code > Stream🎜🎜<a href="https://link.juejin.cn?target=http%3A%2F%2Fnodejs.cn%2Fapi%2Fstream.html%23class-streamtransform" target="_blank" rel=" nofollow noopener noreferrer" title="http://nodejs.cn/api/stream.html#class-streamtransform" ref="nofollow noopener noreferrer"><code>Transform🎜: Kann Duplex-Streams, die Daten ändern oder konvertieren 🎜🎜🎜Alle Streams sind EventEmitter🎜 Instanz. Das heißt, wir können Änderungen im Datenfluss über den Ereignismechanismus überwachen. 🎜🎜4. Datenmodus und Cache-Bereich 🎜🎜Bevor wir uns eingehend mit der spezifischen Verwendung der 4 Stream-Typen befassen, müssen wir zwei Konzepte verstehen: Datenmodus und Pufferbereich, was hilfreich ist. Es wird uns helfen, es im nächsten Studiengang besser zu verstehen. 🎜🎜4.1 Datenmodus🎜🎜Alle von der Node.js-API erstellten Streams funktionieren nur mit Strings Arbeiten Sie mit Buffer- (oder Uint8Array)-Objekten. 🎜🎜4.2 Cache🎜🎜Writable- und Readable-Streams sind beides Speichern Sie Daten in einem internen Puffer. 🎜

Die Datenmenge, die gepuffert werden kann, hängt von der an den Stream-Konstruktor übergebenen Option highWaterMark ab. Bei normalen Streams gibt die Option highWaterMark die Gesamtzahl der Bytes an ;Für Streams, die im Objektmodus betrieben werden, gibt die Option highWaterMark die Gesamtzahl der Objekte an. Die Option highWaterMark 选项, 对于普通的流,highWaterMark 选项指定字节的总数;对于在对象模式下操作的流,highWaterMark选项指定对象的总数。

highWaterMark 选项是阈值,而不是限制:它规定了流在停止请求更多数据之前缓冲的数据量。

当实现调用 stream.push(chunk) 时,数据缓存在 Readable 流中。 如果流的消费者没有调用 stream.read(),则数据会一直驻留在内部队列中,直到被消费。

一旦内部读取缓冲区的总大小达到 highWaterMark 指定的阈值,则流将暂时停止从底层资源读取数据,直到可以消费当前缓冲的数据

当重复调用 writable.write(chunk) 方法时,数据会缓存在 Writable 流中。

5. 可读流

5.1 流读取的流动与暂停

Readable

highWaterMark ist ein Schwellenwert, kein Grenzwert: Sie bestimmt, wie viele Daten der Stream puffert, bevor er keine weiteren Daten mehr anfordert.
  • Wenn die Implementierung stream.push(chunk)

    Beim Zwischenspeichern im Readable-Stream. Wenn der Konsument des Streams nicht stream.read()

    , die Daten werden immer resident sein. Bleiben Sie in der internen Warteschlange, bis sie verbraucht werden.
  • Sobald die Gesamtgröße des internen Lesepuffers den durch highWaterMark angegebenen Schwellenwert erreicht, stoppt der Stream vorübergehend das Lesen von Daten aus der zugrunde liegenden Ressource, bis die aktuell gepufferten Daten verbraucht werden können

    Bei wiederholtem Aufruf writable.write(chunk)
  • Methode, die Daten werden im Writable-Stream zwischengespeichert werden. 5. Lesbare Streams
    • Flow-Modus: Lesen Sie Daten aus der unteren Ebene des Systems und push() sie in den Cache-Bereich. Nach Erreichen des highWaterMark gibt push() false zurück und die Ressourcen fließen nicht mehr in den Cache-Bereich Das Datenereignis wird ausgelöst, um die Daten zu verbrauchen.
    • Pausemodus: Alle lesbaren Streams starten im angehaltenen Pausenmodus und die Methode stream.read() muss explizit aufgerufen werden, um Daten aus dem Stream zu lesen. Jedes Mal, wenn Daten den Pufferbereich erreichen, wird ein lesbares Ereignis ausgelöst, das heißt, jeder Push () löst lesbar aus.
  • So schalten Sie den Pausenmodus in den Fließmodus um:
  • Datenereignishandle hinzufügen
    • Methode stream.resume() aufrufen
    • Methode stream.pipe() aufrufen, um Daten an den beschreibbaren Modus zu senden

Fließmodus Möglichkeiten, in den Pausenmodus zu wechseln: Wenn kein Pipeline-Ziel vorhanden ist, rufen Sie die Methode stream.pause() auf.

Löschen Sie alle Pipeline-Ziele, falls vorhanden. Mehrere Pipeline-Ziele können durch Aufrufen der Methode stream.unpipe() entfernt werden. 5.2 Häufige Beispiele für lesbare Streams , Daten, wenn sie fließen Wenn die Schreibgeschwindigkeit langsam ist oder das Schreiben unterbrochen wird, wird der Datenfluss im Cache-Bereich zwischengespeichert.

Wenn der Produzent zu schnell schreibt, wird der Warteschlangenpool gefüllt Nach dem Freigeben der Warteschlange muss der Produzent angewiesen werden, die Produktion auszusetzen. Wenn die Warteschlange freigegeben wird, sendet der beschreibbare Stream eine Entleerungsnachricht an den Produzenten.

6.2 Beispiel für einen beschreibbaren Stream

import path from &#39;path&#39;;
import fs, { read } from &#39;fs&#39;;

const filePath = path.join(path.resolve(), &#39;files&#39;, &#39;text.txt&#39;);

const readable = fs.createReadStream(filePath);
// 如果使用 readable.setEncoding() 方法为流指定了默认编码,则监听器回调将把数据块作为字符串传入;否则数据将作为 Buffer 传入。
readable.setEncoding(&#39;utf8&#39;);
let str = &#39;&#39;;

readable.on(&#39;open&#39;, (fd) => {
  console.log(&#39;开始读取文件&#39;)
})
// 每当流将数据块的所有权移交给消费者时,则会触发 &#39;data&#39; 事件
readable.on(&#39;data&#39;, (data) => {
  str += data;
  console.log(&#39;读取到数据&#39;)
})
// 方法将导致处于流动模式的流停止触发 &#39;data&#39; 事件,切换到暂停模式。 任何可用的数据都将保留在内部缓冲区中。
readable.pause();
// 方法使被显式暂停的 Readable 流恢复触发 &#39;data&#39; 事件,将流切换到流动模式。
readable.resume();
// 当调用 stream.pause() 并且 readableFlowing 不是 false 时,则会触发 &#39;pause&#39; 事件。
readable.on(&#39;pause&#39;, () => {
  console.log(&#39;读取暂停&#39;)
})
// 当调用 stream.resume() 并且 readableFlowing 不是 true 时,则会触发 &#39;resume&#39; 事件。
readable.on(&#39;resume&#39;, () => {
  console.log(&#39;重新流动&#39;)
})
// 当流中没有更多数据可供消费时,则会触发 &#39;end&#39; 事件。
readable.on(&#39;end&#39;, () => {
  console.log(&#39;文件读取完毕&#39;);
})
// 当流及其任何底层资源(例如文件描述符)已关闭时,则会触发 &#39;close&#39; 事件。
readable.on(&#39;close&#39;, () => {
  console.log(&#39;关闭文件读取&#39;)
})
// 将 destWritable 流绑定到 readable,使其自动切换到流动模式并将其所有数据推送到绑定的 Writable。 数据流将被自动管理
readable.pipe(destWriteable)
// 如果底层流由于底层内部故障而无法生成数据,或者当流实现尝试推送无效数据块时,可能会发生这种情况。
readable.on(&#39;error&#39;, (err) => {
  console.log(err)
  console.log(&#39;文件读取发生错误&#39;)
})

Weitere Informationen zu Knoten finden Sie unter:

nodejs-Tutorial

! !

Das obige ist der detaillierte Inhalt vonLassen Sie uns über das Kernmodul in Nodejs sprechen: Stream-Modul (sehen Sie, wie man es verwendet). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:掘金社区. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Jenseits des Browsers: JavaScript in der realen WeltJenseits des Browsers: JavaScript in der realen WeltApr 12, 2025 am 12:06 AM

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript: Erforschung der Vielseitigkeit einer WebspracheJavaScript: Erforschung der Vielseitigkeit einer WebspracheApr 11, 2025 am 12:01 AM

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Die Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenDie Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenApr 10, 2025 am 09:33 AM

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

Entmystifizieren JavaScript: Was es tut und warum es wichtig istEntmystifizieren JavaScript: Was es tut und warum es wichtig istApr 09, 2025 am 12:07 AM

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Ist Python oder JavaScript besser?Ist Python oder JavaScript besser?Apr 06, 2025 am 12:14 AM

Python eignet sich besser für Datenwissenschaft und maschinelles Lernen, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python ist bekannt für seine prägnante Syntax- und Rich -Bibliotheks -Ökosystems und ist für die Datenanalyse und die Webentwicklung geeignet. 2. JavaScript ist der Kern der Front-End-Entwicklung. Node.js unterstützt die serverseitige Programmierung und eignet sich für die Entwicklung der Vollstapel.

Wie installiere ich JavaScript?Wie installiere ich JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript erfordert keine Installation, da es bereits in moderne Browser integriert ist. Sie benötigen nur einen Texteditor und einen Browser, um loszulegen. 1) Führen Sie sie in der Browser -Umgebung durch, indem Sie die HTML -Datei durch Tags einbetten. 2) Führen Sie die JavaScript -Datei nach dem Herunterladen und Installieren von node.js nach dem Herunterladen und Installieren der Befehlszeile aus.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen