Flux против StreamingResponseBodyJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Flux против StreamingResponseBody

Сообщение Anonymous »

Я пытаюсь отправить массив байтов в FE, не блокируя потоки Tomcat, и я увидел, что Spring Reactive обеспечивает эту функциональность через Flux.

Код: Выделить всё

    ------------- FLUX approach ------------
@GetMapping(value = "/video-flux", produces = "video/mp2t")
public Flux videoFlux(@PathVariable Long deviceId, HttpServletResponse response) {
// return Flux of byte[] from camera
}

------------ StreamingResponseBody approach ---------
@GetMapping(value = "/video-flux/streaming", produces = "video/mp2t")
public ResponseEntity videoFluxWithStreaming(@PathVariable Long deviceId) {

StreamingResponseBody responseBody = outputStream -> {
sameFluxFromPreviousAPI
.toIterable()
.forEach(bytes -> {
try {
outputStream.write(bytes);
outputStream.flush();
} catch (IOException e) {
throw new RuntimeException("Client disconnected");
}
});
};

return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_TYPE, "video/mp2t")
.header(HttpHeaders.CONNECTION, "keep-alive")
.header(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, must-revalidate")
.header("X-Accel-Buffering", "no")
.body(responseBody);
}
Хотя оба этих подхода отправляют данные в объект Flux (я добавил несколько журналов), только StreamingResponseBody правильно отправляет байты в FE для отображения в виде видео. Есть ли причина, почему это происходит? Я провел небольшое исследование и обнаружил, что Flux может иметь внутренний буфер и освобождать массив, как только он заполнится, но я не уверен, как именно я могу обойти эту проблему.
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/798 ... sponsebody
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»