Я использую актор akka-streams 'ActorPublisher
в качестве потоковой передачи данных для каждого соединения Source
, отправляемых на входящее соединение WebSocket или HTTP.
ActorPublisher
's контракт заключается в регулярном запросе данных путем предоставления спроса - количества элементов, которые могут быть приняты нижестоящими. Я не должен отправлять больше элементов, если запрос равен 0. Я заметил, что если я буферизирую элементы, когда потребитель работает медленно, этот размер буфера колеблется от 1 до 60, но в основном около 40-50.
Для потоковой передачи я использую возможность akka-http устанавливать вывод WebSocket и данные HttpResponse
на Source
из Message
s (или ByteString
s).
Интересно, как работает противодавление в этом случае - когда я передаю данные клиенту через сеть. Как именно рассчитываются эти числа? Проверяет ли он, что происходит на сетевом уровне?