Stream Output Multiplexing?
-
Guten Abend,
Mit fällt der richtige Begriff nicht ein, wonach ich suchen muss. Ich möchte einen Stream bauen, der sämtliche Eingaben (also Write-calls) auf eine beliebige Anzahl anderer Stream verteilt. Z.B. möchte ich einen Stream haben, der Konsole, File und Netzwerk zu einem einzigen grossen Output-Stream vereint.
Gibt es sowas oder muss ich das selbst bauen?
MfG
-
Ich verstehe den Sinn dahinter nicht, was genau bezweckst du damit ?
Was genau soll das dann bringen ?
Und das nachzubilden sollte (je nachdem wie genau das funktionieren soll, das kann ich mir grad nicht vorstellen) ja nicht so schwer sein.
-
DarkShadow44 schrieb:
Ich verstehe den Sinn dahinter nicht, was genau bezweckst du damit? Was genau soll das dann bringen?
Dass man einen Stream übergeben kann und es tatsächlich in zwei Streams oder mehr geschrieben wird. Meistens wird dies allerdings auf höherer Ebene gemacht. Sieh dir als Beispiel dazu mal einen Logger an. Die haben meistens die Möglichkeit mehrere Targets zu definieren, z.B. ein File und gleichzeitig auch die Konsole.
@rant,
Soweit mir bekannt ist, hat das .Net Framework selber dafür keine Implementierung. Mir ist auch keine bekannt in einer Bibliothek Dritter. Je nach dem wie fehlersicher du das haben möchtest, kann es einfach bis ultra schwer sein, sowas selber zu implementieren. Mit Fehlersicherheit meine ich vor allem Transaktionssicherheit. Heisst wenn der k-te Stream eine Exception wirft, müssen die Streams vor dem k-te ein sauberes Rollback durchführen? (für alle k grösser wie 1 :D)Grüssli
-
Dravere, du hast mich verstanden. Es geht um eine Art Logging, aber viel genereller. Dies ist der Grund, weshalb die ganze Sache über Streams realisiert werden sollte, und nicht über Writer.
Gestern habe ich mir dann noch einen solchen Multiplex-Stream zusammengeschraubt, aber wie ihr auch schon erkannt habt, ist dabei Transaktionssicherheit ein Ding der Unmöglichkeit. Wenn ein einziger Stream abkackt, ist grundsätzlich der ganze Multiplexer unbrauchbar. Aber das ist nicht so wichtig bzw. nicht mein Problem (zum Glück, denn einige der Streams schreien geradezu nach Fehlern, etwa GZip über SFTP... üble Sachen gibt's ;)).
Dummerweise (oder soll ich sagen: glücklicherweise) wurde heute nun die Anforderung gestrichen, weshalb ich den Multiplexer bis auf weiteres doch nicht brauche.
Vielen Dank trotzdem
-
Trotzdem nochmal dazu:
Warum ist das so schwer mit der Fehlersicherheit ? Man versucht die Daten in einer Schleife in alle Streams zu schreiben, merkt sich dabei bei jedem Stream die Position und wenn einer einen Fehler wirft setzt man einfach für jeden Stream die Länge zurück. damit sollte der Stream doch wieder auf dem Zustand vor dem Schreibvorgang sein ?
Oder wo ist mein Verständnisfehler ?
-
DarkShadow44 schrieb:
Trotzdem nochmal dazu:
Warum ist das so schwer mit der Fehlersicherheit ? Man versucht die Daten in einer Schleife in alle Streams zu schreiben, merkt sich dabei bei jedem Stream die Position und wenn einer einen Fehler wirft setzt man einfach für jeden Stream die Länge zurück. damit sollte der Stream doch wieder auf dem Zustand vor dem Schreibvorgang sein ?
Oder wo ist mein Verständnisfehler ?Stream != File
Ein Stream kann z.B. auch ein Netzwerk-Socket sein. Probier da mal eine "Länge" zurückzusetzenGrüssli
-
2. Problem:
Selbst wenn jeder Stream die Möglichkeit anbieten würde die Länge zurückzusetzen...
Dann ist natürlich auch noch lange nicht garantiert dass dies immer möglich ist. D.h. da kann wieder eine Exception fliegen.
Die kann man natürlich fangen, aber man hat trotzden die Änderung nicht rückgängig gemacht.
-
Hm ja stimmt das hatte ich nicht bedacht. Kommt dann halt immer drauf an was genau man erreichen will.
Vielleicht wäre es auch möglich das ganze ohne Rollback zu machen ?