Ich habe eine Reihe von (untergeordneten) Prozessen in node.js, die große Datenmengen übertragen müssen.
Wenn ich das Handbuch lese sagt es die stdio und ipc-Schnittstelle zwischen ihnen blockieren, so dass das nicht tun.
Ich untersuche die Verwendung von Dateideskriptoren, aber ich kann keine Möglichkeit finden, von ihnen zu streamen (siehe meine andere spezifischere Frage Wie zu / von einem Dateideskriptor in Knoten zu streamen? )
Ich denke, ich könnte einen Net-Socket verwenden, aber ich befürchte, dass das unerwünschte Overhead hat.
Ich sehe das auch, aber es ist nicht das gleiche (und hat keine Antworten: So senden Sie in Node.js riesige Datenmengen vom untergeordneten Prozess zum übergeordneten Prozess auf nicht blockierende Weise? )
Ich habe eine Lösung gefunden, die zu funktionieren scheint: Wenn Sie den Kindprozess erstellen, können Sie Optionen für stdio
übergeben und eine Pipe zum Streamen von Daten einrichten.
Der Trick besteht darin, ein zusätzliches Element hinzuzufügen und es auf 'pipe' zu setzen.
Im übergeordneter Prozess-Stream zu child.stdio[3]
.
Öffnen Sie in de child den Stream für den Dateideskriptor 3.
%Vor% Beachten Sie, dass nicht jeder Stream, den Sie von npm erhalten, korrekt funktioniert, ich habe JSONStream.stringify()
versucht, aber es hat Fehler erzeugt, aber es hat funktioniert, nachdem ich es über through2
weitergeleitet habe. (Keine Ahnung, warum das so ist.)
Edit: einige Beobachtungen: Es scheint, das Rohr ist nicht immer Duplex-Stream, so dass Sie möglicherweise zwei Rohre benötigen. Und da ist etwas Seltsames, wo es in einem Fall nur funktioniert, wenn ich auch einen IPC-Kanal habe, also insgesamt 6: [stdin, stdout, stderr, pipe, pipe, ipc].
Tags und Links node.js stream child-process