[英]Akka-Http : Working with websockets - Patterns for extending the Flow
akka http websocket的确很好用。 它接受一个Flow[Message, Message, Future[Done]
我们可以创建一个形状相同的Source val src = Source.maybe
和Sink val snk = Sink.foreach(...)
并调用Flow.fromSinkAndSourceMat(snk, src)
。 src用于将数据发送到websocket(流的源),而snk用于接收数据。
在某些情况下,我们希望扩展传递的流,即-我们希望接收Message,将其发送到另一个Flow进行JSON解析或数据验证,然后最终发送到接收器。
如何构造我在Http().singleWebSocketRequest(WebSocketRequest("ws://someip:port"), flow)
传递的Http().singleWebSocketRequest(WebSocketRequest("ws://someip:port"), flow)
以包括其他各个流阶段以及最后的接收器。 我可以将源设置为Source.maybe
是因为我只关心传入。
您可以将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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.