文档中说在Http().bindAndHandle()
:
连接源上没有反压力,即:所有连接都以最大速率被接受,这取决于在应用程序上,可能会出现DoS风险!
同样适用于bindAndHandleAsync()
、bindAndHandleSync()
。
文档还指出,即使是更高级别的系统,如文件IO或TCP,我认为HTTP是在TCP之上,将通过响应流机制工作。
Http().bind()
是魔函数吗?这会产生反压力吗?
如何使用akka-streams公开反向施压的HTTP端点?
在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。