Verteilen von Daten an schreibbaren Datenstrom, der noch nicht bereit ist, Daten zu empfangen

8

Gibt es eine Möglichkeit, einen lesbaren Stream mit einem schreibbaren Stream in Node.js zu verbinden, in dem das Schreibmedium noch nicht bereit ist, Daten zu empfangen? Mit anderen Worten, ich möchte das Lesbare mit dem Schreibfähigen verbinden, aber ich möchte das Schreibfähige initialisieren, einschließlich der Definition der Schreibmethode, zu einem späteren Zeitpunkt im Programm. Vielleicht müssen wir die Write-Methode implementieren, aber gibt es eine Möglichkeit, einen schreibbaren Stream in ähnlicher Weise anzuhalten, in der Sie einen lesbaren Stream pausieren können? Oder vielleicht können wir einen intermediären Through- / Transform-Stream verwenden und die Daten dort puffern, bevor wir die Daten an die Schreibrechte leiten!

Als Beispiel machen wir normalerweise:

%Vor%

aber ich möchte etwas tun wie:

%Vor%

Ich frage mich nur, ob das möglich ist und wie es richtig gemacht wird, bis jetzt haben wir Schwierigkeiten, beides herauszufinden.

Ich denke, ich suche die Daten in einem intermediären Transformations-Stream zu puffern, bevor sie mit einem beschreibbaren Stream verbunden / piped werden, und anschließend, sobald sie verbunden ist, streame die gepufferten Daten zuerst vor neuen Daten. Scheint wie eine vernünftige Sache zu tun, kann keine Informationen dazu finden.

    
Alexander Mills 12.04.2016, 06:11
quelle

1 Antwort

2

Beachten Sie, dass ich hier ein Intervall verwende, um zu simulieren, dass der Schreiber lesen kann oder nicht. Sie können dies beliebig machen, dh wenn der Writer false zurückgibt, würden Sie den Zustand aktualisieren, um die Pufferung usw. zu starten. Ich denke, die letzte Zeile ist das, was Sie wollen, zB

%Vor%

Dies lautet wie folgt

%Vor%

Im Beispielcode gibt es einige Änderungen, die wir vornehmen können, um alle Daten zu puffern. Ich werde nach dem Code beschreiben. Alles, was Sie über Streams und mehr wissen müssen, finden Sie in den Dokumenten. Ich denke, sie könnten mit vollständigeren Beispielen arbeiten, aber sie sind ziemlich gut, genauso wie ...

Ссылка

Dies ist der Code.

%Vor%
  

Ich suche nach dem kanonischen Weg, um eine Transformation / durch zu implementieren   stream, der alle Daten zwischenspeichert, bis pipe aufgerufen wird.

Nehmen Sie die folgenden Änderungen vor

%Vor%

Sie können den lesbaren Stream auch pausieren, wodurch der schreibbare Stream angehalten wird, weil er keine Daten mehr empfängt, dh ...

Um dies zu testen, erstellen Sie eine ziemlich große Datei auf der Festplatte, z. B. 100 MB oder mehr, und führen Sie dies aus ...

%Vor%

Der Grund für die sofortige Pause ist, dass zu dem Zeitpunkt, zu dem das Intervall 10ms ausgelöst hat, die Datei bereits geschrieben wurde. Es gibt Variationen dazu, dh ...

%Vor%     
Harry 20.04.2016, 20:03
quelle

Tags und Links