Spring WebFlux с использованием RSocket: формат сообщения Kotlin coroutines Flow vs Reactor Flux

Есть ли разница в трафике ввода-вывода, когда мы используем поддержку RSocket Spring WebFlux (поверх WebSockets) для передачи значений с помощью Kotlin Coroutines Flow и Reactor Flux?

@MessageMapping("stream")
suspend fun send(): kotlinx.coroutines.flow.Flow<SomeClass> = ...

VS

@MessageMapping("stream")
fun send(): reactor.core.publisher.Flux<SomeClass> = ...

Кроме того, должен ли код на стороне клиента (JS с rsocket-websocket-client) отличаться в зависимости от того, использует ли сервер Kotlin Coroutines Flow или Reactor Flux?


person Peter    schedule 26.03.2021    source источник


Ответы (1)


Нет, они должны быть такими же. Весна должна позаботиться о различиях между ними. Тем не менее, если вы заметите какие-либо ошибки, вы должны их исправить.

Клиентский код не должен иметь возможность наблюдать, определен ли сервер с помощью Flux или Flow. В дополнение к этому, мы надеемся, что клиент также не знает язык реализации сервера.

Я не думаю, что ваш первый пример тоже нужно приостанавливать, так как Flow все равно будет холодным. https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/

Интерфейс потока не передает информацию о том, является ли поток холодным потоком, который можно собирать повторно, и запускает ли он выполнение одного и того же кода каждый раз, когда он собирается, или это горячий поток, который генерирует разные значения из одного и того же запущенного источника на каждом из них. коллекция. Обычно потоки представляют собой холодные потоки.

person Yuri Schimke    schedule 26.03.2021