Flux реагирует вместо WebSocket (Spring boot) - PullRequest
0 голосов
/ 30 ноября 2018

Я пишу сервис, который будет отправлять пользователям новые данные по мере их поступления на мой сервер.Таким образом, сервер получает данные, и все это отправляется пользователям.Я использовал WebSocket для этой цели.Пользователи подписываются на тему, а затем получают информацию о новых данных.Но я видел в WebFlux, что мы можем возвращать данные непрерывно, как в сокете.Например,

@GetMapping(value = "/test", produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
    public Flux<Object> testStreamOfData() {
        return Flux.generate(() -> "", (state, sink) -> "Hello from reactivness")
                .delayElements(Duration.of(2, ChronoUnit.SECONDS));
    }

Вопрос: могу ли я реализовать ту же логику с Flux, что и с Socket?

Например, пользователи будут отправлять запрос на сервер и будут возвращать ответы, когда новые данные будутпришел.

1 Ответ

0 голосов
/ 30 ноября 2018

Вы действительно можете использовать Flux для потоковой передачи данных с помощью Spring WebFlux.

Spring WebFlux использует тип носителя "application/stream+json для потоковой передачи JSON с разделителями строк и "text/event-stream"для событий, отправленных сервером.Первый весьма полезен для связи между серверами (вам нужен клиент, который поддерживает этот формат), а второй - для связи между серверами (браузеры изначально поддерживают это).

Таким образом, вы можете передавать данные многим клиентами даже использовать один и тот же источник (вы должны посмотреть на создание одного экземпляра Flux.share()).

Теперь я не уверен, что под «сокетом» вы имеете в виду сокеты TCP или socket.io.TCP-сокеты довольно низкого уровня, и WebFlux поддерживает WebSockets, если вы ищете аналогичные функции.Если вы ищете транспорты более высокого уровня, такие как STOMP / socket.io, которые поддерживают подписки, то WebFlux пока не поддерживает это (Spring Framework в настоящее время работает над поддержкой RSocket ).

Если вы ищете потоковую передачу данных в браузеры, то SSE - лучший выбор здесь (так как потоковая передача JSON изначально не поддерживается).

...