2015-06-18 15 views
10

Sto cercando casi d'uso per l'utilizzo di flussi reattivi all'interno di un contenitore di servlet (o solo di un server HTTP).Casi di utilizzo per i flussi reattivi utilizzando i flussi 9 di Java in Servlet?

Si è iniziato a chiedere Jetty project: "Jetty è reattivo?" e abbiamo notato il proposal per aggiungere i flussi reattivi a Java 9.

Così abbiamo iniziato some experiments con l'utilizzo del reattivo flussi API per async servlet IO, che sono abbastanza interessante ..... ma manca qualsiasi attenzione perché ci mancano casi d'uso reali per focalizzare le preoccupazioni più importanti.

Così chiunque ha buoni casi d'uso che potrebbero condividere/spiegare in modo da poter dirigere i nostri esperimenti di pontili per soddisfare i loro bisogni. Il genere di cose che ho immaginato è che un editore di database basato su RS invii gli oggetti completamente su una risposta HTTP o una connessione web socket usando Flow.Processors per le conversioni lungo la strada.

risposta

5

Un caso di utilizzo utilizzabile è quando si utilizza il POST di dati di moduli in più parti, in particolare durante il caricamento di file.

Il progetto Typesafe ConductR (dichiarazione di non responsabilità: sono il lead tecnologico per esso), riceve dati di modulo in più parti quando un utente carica un pacchetto. Usiamo akka-streams/http.

Abbiamo letto le prime due parti del flusso poiché il nostro protocollo specifica che devono dichiarare alcuni metadati per consentirci di sapere a quale nodo scrivere i pacchetti. Dopo alcune convalide, determiniamo il nodo in cui scrivere e colleghiamo il flusso parzialmente consumato. Quindi il nodo che riceve la richiesta di caricare il pacchetto negozia il nodo su cui lo scriverà, senza dover consumare l'intero flusso (che potrebbe essere 200MB) e quindi scriverlo di nuovo.

La scrittura di dati di moduli in più parti è anche un ottimo caso d'uso dato che è possibile eseguire lo streaming del file dal disco come sorgente e passarlo ad un endpoint http, cioè il lato client di ciò che ho descritto sopra.

I vantaggi con entrambi i casi di utilizzo sono la riduzione della quantità di memoria necessaria per spostare i byte su una rete e si esegue solo il file I/O dove è necessario.

Problemi correlati