Verwendung von Akka HTTP zum Generieren von Inhalten über einen Ausgabestream

8

Ich bin ziemlich Neuling zu Akka Streams und Akka HTTP.

Ich möchte einen einfachen HTTP-Server generieren, der aus dem Inhalt eines Ordners eine ZIP-Datei generieren und an den Client senden kann.

Die org.zeroturnaround.zip.ZipUtil macht die Erstellung einer Zip-Datei sehr einfach, benötigt aber ein outputStream .

Hier ist meine Lösung (in Scala Sprache geschrieben):

%Vor%

Diese Lösung funktioniert, behält aber den gesamten Inhalt im Speicher und ist daher nicht skalierbar.

Ich denke, der Schlüssel zur Lösung ist, dies zu verwenden:

%Vor%

aber ich weiß nicht, wie ich es benutzen soll. : - (

Irgendwelche Hilfe bitte?

    
david.perez 13.12.2016, 16:33
quelle

2 Antworten

9

Versuchen Sie es

%Vor%

Sie erhalten erst Zugriff auf den OutputStream, sobald die Quelle materialisiert ist. was nicht sofort passieren könnte. Theoretisch könnte sich die Quelle auch mehrfach materialisieren, also sollten Sie damit umgehen können.

    
Rüdiger Klaehn 13.12.2016 17:03
quelle
3

Ich hatte dasselbe Problem. Um es backpressy-kompatibel zu machen, musste ich artificial InputStream schreiben, was später in Source via StreamConverters.fromInputStream(() => input) umgewandelt wird, was wiederum von deiner Akka-Http DSL complete -Richtlinie zurückkommt.

Hier ist was ich geschrieben habe.

%Vor%

Wenn Sie Fehler in meinem Code finden, lassen Sie es mich wissen.

    
expert 13.12.2016 16:48
quelle

Tags und Links