akka http websocket效果很好。它需要Flow[Message, Message, Future[Done]
我们可以创建相同形状的来源val src = Source.maybe
和接收器val snk = Sink.foreach(...)
并致电Flow.fromSinkAndSourceMat(snk, src)
。
src用于向websocket(流的源)发送数据,snk用于接收数据。
有些情况我们希望扩展我们传递的流,即 - 我们希望接收Message,将其发送到另一个流进行JSON解析或数据验证,然后最终发送到接收器。
如何构建我在Http().singleWebSocketRequest(WebSocketRequest("ws://someip:port"), flow)
中传递的Flow以包含各种其他流程阶段,然后是最终接收器。
我可以将我的源设置为Source.maybe
,因为我只关心传入。
答案 0 :(得分:1)
您可以将Sink
列为一系列Flow
和最终Sink
。
val flow1: Flow[Message, Message, NotUsed] = ???
val flow2: Flow[Message, String, NotUsed] = ???
val sink: Sink[String, Future[Done]] = Sink.foreach[String](println)
val megaSink = flow1.via(flow2).to(sink)
然后可以使用您的编组Sink
将您的WS流组合在一起,类似于您已有的:
Flow.fromSinkAndSource(megaSink, Source.maybe)