javascript / expert
Snippet
Manuelle Steuerung des Stream-Backpressure
Wenn Daten schneller in einen Stream geschrieben werden, als das Ziel sie verarbeiten kann, schwellen die Speicherpuffer an. Dieses Pattern überwacht manuell den Rückgabewert von write() und pausiert die Ausführung bis zum 'drain'-Event, um stabilen Speicherverbrauch zu garantieren.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const { once } = require('events');const fs = require('fs');async function writeLargeData(stream, dataGen) {for (const chunk of dataGen) {const canWrite = stream.write(chunk);if (!canWrite) {await once(stream, 'drain');}}stream.end();}const writer = fs.createWriteStream('output.log');writeLargeData(writer, ['large', 'data', 'chunks']);
nodejs
Erklärung
1
const canWrite = stream.write(chunk);
Gibt false zurück, wenn der interne Puffer den highWaterMark-Schwellenwert überschreitet.
2
await once(stream, 'drain');
Verwendet events.once, um die Async-Schleife zu pausieren, bis der Puffer geleert wurde.