【问题标题】:using handleWebsocketMessage in akka-http在 akka-http 中使用 handleWebsocketMessage
【发布时间】:2023-12-23 15:29:02
【问题描述】:

使用akka-http,如何构造一个Flow[Message, Message, _] 传递给handleWebsocketMessage 只监听传入数据但不写回任何内容?无论如何都可以使用接收器吗?因为 Sink 听起来像是我需要的。

【问题讨论】:

    标签: scala akka akka-stream akka-http


    【解决方案1】:

    可以从独立的SourceSink 创建一个Flow,这是您需要的。要了解有关它如何使用单词的更多内部信息,您可能需要阅读 stream composition 文档。

    一般来说,您需要创建一个 Flow,使其成为一个可以处理传入消息的 Sink 和一个从不发出的 Source,这是通过以下方式实现的:

    Flow.wrap(Sink.foreach(println), Source.lazyEmpty)(Keep.none)
    

    【讨论】:

    • 感谢您的回答,但这给了我一个错误,因为 wrap 有 3 个或 5 个类型参数。我查看了源代码github.com/akka/akka/blob/release-2.3-dev/akka-stream/src/main/…。但是我不太明白第三种应该是什么。
    • 再次感谢,但实际上唯一的参数应该是图表。 “def wrap[I, O, M](g: Graph[FlowShape[I, O], M]): Flow[I, O, M]" 我如何创建它,或者如果你能指出我正确的方向.
    • Flow.wrap(Sink.foreach(println), Source.lazyEmpty)(Keep.none) 终于成功了。
    • A Flow[In, Out, M] IS-A Graph[FlowShape[In, Out], M] :-) 所有类型的 Flows/Sinks/Sources/任何东西实际上都是图表,我们已经统一了它们。