Stream Akka流:运行过程中的流

Stream Akka流:运行过程中的流,stream,akka,Stream,Akka,如何在流程中形成流程?假设我有一个进程,它通过标准输入获取输入,通过标准输出发送输出。我想让它流动起来。因此,流将首先启动流程,控制其输入和输出流,然后充当映射,通过将其提供给流程将输入映射到输出?并最终在流结束时终止进程。在这种情况下,背压控制是如何工作的?这里有一个非常基本的问题,它会由于输入或输出(接收器/源)的中断而终止。为简单起见,我假设没有stdin,但您可以调整它以添加一个不会被忽略的接收器,并且: //从“ls”命令捕获标准输出 val runCmd:Source[消息,未使用]

如何在流程中形成流程?假设我有一个进程,它通过标准输入获取输入,通过标准输出发送输出。我想让它流动起来。因此,流将首先启动流程,控制其输入和输出流,然后充当映射,通过将其提供给流程将输入映射到输出?并最终在流结束时终止进程。在这种情况下,背压控制是如何工作的?

这里有一个非常基本的问题,它会由于输入或输出(接收器/源)的中断而终止。为简单起见,我假设没有stdin,但您可以调整它以添加一个不会被忽略的
接收器,并且:

//从“ls”命令捕获标准输出 val runCmd:Source[消息,未使用]={ Source.fromIterator[Message](()=>Process(“ls”).lineStream.toIterator.map(line=>TextMessage.Strict(line))) } //创建用于向客户端发送标准输出源的流 val messageStdout:Flow[Any,Message,NotUsed]=流 .fromSinkAndSourceCoupled(Sink.ignore,runCmd) 至于背压,请注意我上面的代码示例是一个阻塞
map
操作(一次一行)。随着处理速度的增长,您可以开发一个异步解决方案,并且该解决方案具有最大的并行性,遵从的是中定义的背压

// capture stdout from the "ls" command val runCmd: Source[Message, NotUsed] = { Source.fromIterator[Message](() => Process("ls").lineStream.toIterator.map(line => TextMessage.Strict(line))) } // create flow for emitting stdout source to client val messageStdout: Flow[Any, Message, NotUsed] = Flow .fromSinkAndSourceCoupled(Sink.ignore, runCmd)