Соединения Akka HTTP с обратным давлением

В документации сказано, что Http().bindAndHandle() :

к источнику соединений не применяется обратное давление, т. е. все соединения принимаются с максимальной скоростью, что, в зависимости от приложений, может представлять риск отказа в обслуживании!

То же самое относится и к bindAndHandleAsync() bindAndHandleSync().

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

Является ли Http().bind() магической функцией? Применяется ли это обратное давление?

Как открыть конечную точку HTTP с обратным давлением с помощью akka-streams?


person Hunor Kovács    schedule 10.08.2015    source источник
comment
Документация исправлена ​​в github.com/akka/akka/commit/ .   -  person Roland Kuhn    schedule 13.08.2015
comment
Спасибо, Роланд! Я ценю всю работу akka, она одна из величайших в компьютерных науках :D !!   -  person Hunor Kovács    schedule 13.08.2015


Ответы (1)


в java это будет выглядеть так

Flow<ByteString, ByteString, BoxedUnit> dataFlow = ...;
Http
            .get(actorSystem)
            .bind(host, port, materializer)
            .to(foreach(con -> {
                logger.info("Accepted connection from {}.", con.remoteAddress());
                con.handleWith(dataFlow, materializer)
            }))
            .run(materializer);

dataFlow — это любой поток, который преобразует входящие сообщения и сопоставляет их с ответными событиями. таким образом, вы получите выгоду от всех вкусностей реактивного потока.

вы также можете попробовать использовать http-маршрутизацию и простой Tcp.

person kamiseq    schedule 10.08.2015