Sto usando una maglia StreamingOutput
che funzionava bene fino a quando non abbiamo aggiornato a Jersey 2.16. Ecco la cosa. Il mio StreamingOuput
produce l'output molto lentamente in alcune circostanze. Scrivo regolarmente i dati, ma lo scrivo piuttosto lentamente e solo un po 'alla volta. Io chiamo flush()
su OutputStream
passato a StreamingOutput.write()
ogni volta che scrivo qualsiasi byte, ma il flush() sembra non avere alcun effetto. Nulla viene inviato sul filo fino a quando 8K non è stato scritto su OutputStream
. Sfortunatamente, in alcune circostanze, quando è stato scritto 8K, il client è scaduto.chiamata flush() su Jersey StreamingOutput non ha effetto
Ho scaricato alcuni della sorgente maglia e attraverso alcuni debug, vedo che il OutputStream
passato a write()
è un UnCloseableOutputStream
che avvolge un CommittingOutputStream
.
Il CommittingOutputStream
ha il buffering abilitato, e quindi flush() è essenzialmente un no-op fino a quando la risposta non viene confermata (completa).
Quindi, sono in un sottaceto. Come posso utilizzare un StreamingOutput
(o scrivere in altro modo direttamente su un flusso di output) e forzarlo a inviare byte sul filo prima che l'intera risposta sia completa? C'è un altro modo per farlo con Jersey? Non riesco a trovare alcun metodo su ResponseBuilder
per farlo. Non riesco a trovare alcun modo per disattivare il buffering.