0 Tage Serie
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
javascript
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.