Friday, 27 January 2017

Nodejs Stdout Binary Options

Lesen von Text - und Binärdaten mit Node. js lesbaren Streams Dieses Tutorial erklärt die Verwendung und Erstellung von node. js lesbaren Streams: Versionsinformationen Autor: Jeff Barczewski Veröffentlicht: August 3rd, 2013 Tags: nodejs, streams Level: Intermediate Voraussetzungen: crypto, Ereignisse, installieren Sie npm Module Node. js v0.10 (letzter Stall ist v0.10.15 ab diesem Schreiben), aber Ströme waren in der Regel ein Teil der Node. js aus ihren frühen Tagen Streams2 kann mit älteren Versionen von Knoten verwendet werden Npm-Modul readable-stream Konsumieren oder Verwenden von lesbaren Strömen Einfaches Beispiel für das Lesen einer Datei und das Wiederholen auf stdout: Erstellen eines Sha1-Aufbaus einer Datei und Echo des Ergebnisses auf stdout (ähnlich shasum): Das Datenereignis wird auf dem lesbaren Stream ausgelöst Für jeden Teil der Daten, so dass Sie aktualisieren die Digest mit für jedes Stück, wie Sie gehen, dann endlich das End-Ereignis gefeuert wird, wenn der Stream beendet ist, so können Sie das Endergebnis ausgeben. Beachten Sie, dass jedes Mal, wenn Sie. on () aufrufen, um einen Listener zu registrieren, gibt es den ursprünglichen Stream zurück, so dass Sie Methoden leicht verketten können. Mit Node. js 0.10 gibt es einen besseren Weg, um Streams zu verbrauchen. Die lesbare Schnittstelle erleichtert die Arbeit mit Streams, vor allem Streams, wo Sie andere Dinge zwischen der Erstellung eines Streams und mit dem Stream zu tun. Diese neueren Readable-Streams sind Pull-Streams, wo Sie die Daten anfordern, wenn Sie für sie gelesen werden, anstatt die Daten an Sie gedrückt. Der Schlüssel zum Verständnis dieses Beispiels ist, dass mit der neuen streams2-lesbaren Schnittstelle ein lesbares Ereignis ausgesendet wird, sobald Daten verfügbar sind, um gelesen zu werden, und Sie können. read () aufrufen, um Chunks davon zu lesen. Sobald keine Daten mehr verfügbar sind. Read () gibt null zurück, aber ein weiteres lesbares Ereignis wird erneut ausgelöst, wenn Daten wieder verfügbar sind. Dies wird bis zum Ende der Datei fortgesetzt, wenn das Ende wie zuvor gefeuert wird. Erzeugung eines lesbaren Streams Um Streams mit dem Dateisystem oder von http zu verwenden, können Sie die Kern-fs - und http-Methoden verwenden, um einen Stream zu konstruieren, aber wie würden Sie Ihren eigenen Stream erstellen und ihn mit Daten füllen? Aus einer beliebigen Anzahl von Quellen. Hier ist ein Beispiel für die Erstellung eines lesbaren Strom, der aus zufälligen binären Daten erzeugt wird, dann Hashing es wie zuvor. Dies wäre bei der Erstellung von Streams zum Testen nützlich: Anmerkung: Nach dem Aufruf von read () sollten wir weiterlesen, bis wir fertig sind oder bis push () false zurückgibt. Verwenden von Streams2 mit älteren Node. js-Versionen Wenn Sie diesen Code mit Node. js älter als 0.10 ausführen möchten, können Sie in Ihrem package. json eine Abhängigkeit für readable-stream eingeben und Zeile 5 ändern, um zu lesen: Dies wird die native verwenden Lesbarer Stream, wenn Node. js Version 0.10 ist und wenn nicht, dann wird es laden das Polyfill readable-stream-Modul und verwenden Sie es von dort aus. Pause Wiederaufnahme von Stream und Streams2 Da Streams können manchmal Daten schneller als eine Anwendung kann es zu konsumieren, enthalten Streams die Fähigkeit zu pausieren und die Daten gepuffert, bis der Stream wieder aufgenommen wird. Vor den Streams2 müssten Sie sorgfältige Aufmerksamkeit auf Pausen und Wiederaufnahme Methoden sowie Pufferung der Daten bis zur Wiederaufnahme zu zahlen. Allerdings lesbar von Streams2 (Node. js 0.10 oder über das readable-stream Paket) implementiert diese Funktionalität für Sie und Streams werden automatisch pausiert, bis. read () aufgerufen wird. Sie können auch alte Streams mit einer Readable-Datei umwandeln, um die neue Schnittstelle auf dem alten Stream zu implementieren: Eine andere Situation, in der Sie sich um Pause und Fortsetzen Sorgen machen müssen, ist, wenn Ihr konsumierender Code die alte Push-Stiloberfläche nennt. on (39data39, listener). Dadurch wird der Stream in den Abwärtskompatibilitätsmodus versetzt und Sie müssen pause () und. resume () aufrufen, um die Datenrate zu steuern, die zu Ihrer Anwendung kommt. Weitere Informationen finden Sie in den Stream-API-Dokumenten, wenn Sie die ältere Schnittstelle in Ihrem Code verwenden. Objektströme Anfangs bei der Einführung von Strömen zeigte die offizielle API an, dass Datenblöcke, die gestreamt würden, Buffer oder Strings sein würden, aber viele Nutzer fanden heraus, dass es toll war, auch Objekte streamen zu können. Streams2 in Node. js 0.10 fügte einen Objektmodus zu Streams hinzu, um zu formalisieren, wie dies funktionieren sollte. Im Objektmodus. Read (n) liefert einfach das nächste Objekt zurück (ignoriert das n). Um einen Stream in den Objektmodus zu schalten, setzen Sie die Eigenschaft objectMode in den Optionen, die verwendet werden, um Ihren lesbaren Stream zu erstellen, so dass Sie Objekte in Streams ebenso einfach verwenden können, wie Sie Buffers und Strings verwenden können, aber die einzige Einschränkung ist, dass die Objekte Sie Pass kann nicht null sein, da das anzeigt, dass der Stream beendet ist. Node. js lesbaren Streams sind flexible und einfache Node. js lesbaren Streams sind leicht zu verbrauchen und sogar einfach zu konstruieren. Sie können nicht nur Strom Binär-und String-Daten, sondern auch Objekte und noch profitieren von Stream-Funktionalität. Ich hoffe, Sie genossen diese schnelle Tour von lesbaren Streams, lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben. Für das Lesen lesen Share this pageWenn Sie versuchen, Daten in Node. js von einem ImageMagick-Child-Prozess zu lesen, kommt es beschädigt aus. Ein einfacher Testfall wäre die folgende: Ich würde erwarten, dass das Äquivalent der Befehlszeile Convert sein. Test. jpg - gt test2.jpg, der die Binärdatei korrekt schreibt. Ursprünglich gab es ein Problem mit der maxBuffer-Option zu klein und führt zu einer abgeschnittenen Datei. Nach dem Erhöhen, dass die Datei jetzt etwas größer als erwartet und noch beschädigt. Die Daten von stdout werden benötigt, um über HTTP zu senden. Was wäre der richtige Weg, um diese Daten aus dem ImageMagick lesen stdout gefragt, Mai 28 11 at 20:09 Wenn Timeout größer als 0 ist, dann wird es töten den untergeordneten Prozess, wenn es länger als timeout Millisekunden läuft. Der Kinderprozeß wird mit killSignal abgebrochen (default: SIGTERM). MaxBuffer gibt die größte Anzahl von Daten an, die auf stdout oder stderr erlaubt sind. Wenn dieser Wert überschritten wird, wird der untergeordnete Prozess abgebrochen. Also, wenn Ihr Bild über die Standard-Puffergröße von 2001024 Byte ist, wird Ihr Bild beschädigt werden, wie Sie erwähnt haben. Ich konnte es mit dem folgenden Code zu arbeiten: Hier habe ich Spawn verwendet, um eine stromable stdout erhalten, dann habe ich einen Writeable Stream, um die Daten im Binärformat zu schreiben. Gerade getestet und konnte das resultierende test2.jpg Bild öffnen. BEARBEITEN. Ja, Sie können dies verwenden, um das Ergebnis über HTTP zu senden. Heres ein Beispiel für mich Downsizing ein Bild mit konvertieren, dann die Entsendung des Ergebnisses, um die glowfoto API: beantwortet May 23 11 at 20:57 Vielen Dank, it39s true Ich verpasste vollständig die maxBuffer-Option, aber es doesn39t scheinen, die Korruption zu lösen. Wenn Sie vergrößern, dass mit meinem Beispiel die resultierende Datei ist nicht mehr zu klein, aber immer noch beschädigt. Ihr Beispiel funktioniert, aber ich eigentlich tun müssen, mehr mit den Daten als Rohr es direkt zu einer anderen Datei. Genauer gesagt, würde ich es in einer HTTP-Antwort mit dem Express-Framework zum Beispiel schreiben müssen. Ndash Daniel Cremer Mai 28 11 am 22:06 Daniel Ich habe gerade versucht, indem Sie die spawn Zeile zu. Var konvertieren spawn (39convert39, 39test. jpg39, 39-resize39, 395039, 39-39) und bekam eine JPEG-Datei heruntergefahren 50. Versuchen Sie, Ihren Beitrag mit dem, was Sie jetzt haben, zu aktualisieren. Ndash onteria May 28 11 at 22:12


No comments:

Post a Comment