Więc pozwala wyobrazić następujący przypadek użycia:
A „Slow” klient chce uzyskać duży zbiór danych z serwera. Klient wysyła żądanie do serwera, który ładuje wszystkie dane z bazy danych, przechowuje je w pamięci, a następnie przekazuje do klienta.
I tutaj mamy do czynienia z problemami: Klient obsługuje dane nie tak szybko, jak chcieliśmy => nie możemy zwolnić pamięci => może to spowodować błąd braku pamięci.
Strumienie reaktywne rozwiązują ten problem, używając backpressure. Możemy owinąć wydawcę Slicka wokół źródła Akka, a następnie "nakarmić" go klientowi poprzez Akka HTTP.
Chodzi o to, że to przeciwciśnienie jest propagowane za pośrednictwem protokołu TCP przez HTTP Akka w dół do wydawcy, który reprezentuje kwerendę bazy danych.
Oznacza to, że odczytujemy tylko z bazy danych tak szybko, jak klient może pobierać dane.
P.S To tylko mały aspekt, w którym można zastosować strumienie reaktywne.
można znaleźć więcej informacji tutaj:
Należy prawdopodobnie przeczytać na Akka strumieni, jak myślę, że ten mechanizm w śliskim jest dobry sposób na połączenie strumieni Slick i Akka. Za pomocą tego mechanizmu można traktować zbiór wyników w bazie danych jako źródło strumieniowe, a następnie przesłać je do dowolnego potoku przetwarzania/wykresu, który chcesz. Bez tego mostu musiałbyś sam napisać tę część, w pełni materializując najpierw kolekcję do pamięci, która może nie być pożądana. – cmbaxter