【问题标题】:Akka-Http WebSocket: Akka stream use WebSocket as a sinkAkka-Http WebSocket:Akka 流使用 WebSocket 作为接收器
【发布时间】:2016-05-16 18:33:18
【问题描述】:

使用 Akka-Http 和 Akka-Streams 2.4 版,我如何构造一个流,使其具有一个作为 websocket 的接收器。

例如,我想要一个生成随机数的源,这些数字被过滤,假设保留偶数,然后作为接收器流向 WebSocket。

谢谢

【问题讨论】:

    标签: scala websocket akka akka-stream akka-http


    【解决方案1】:

    这段代码放入 akka http 路由将输出连续的随机数流,而不会压倒 websocket

    path("randomNums") {
      val src =
        Source.fromIterator(() => Iterator.continually(ThreadLocalRandom.current.nextInt()))
              .filter(i => i > 0 && i % 2 == 0).map(i => TextMessage(i.toString))
    
        extractUpgradeToWebsocket { upgrade =>
          complete(upgrade.handleMessagesWithSinkSource(Sink.ignore, src))
        }
    }
    

    【讨论】:

    • 非常感谢这个例子。如果我想向所有连接的客户端发送相同的流,我是否必须保留一组他们的 actorRef,在他们连接时添加他们的 actorRef。那么当有一个数字准备好推送给他们时迭代集合?
    • (免责声明:部分猜测):upgrade => 之后的部分正在为每个新的 Websocket 连接单独调用。因此,您需要在那里动态创建一个源。查找 BroadcastHub 将一个根流拆分为 0..n 个单独的根流。 doc.akka.io/docs/akka/2.4/scala/stream/…
    猜你喜欢
    • 2017-07-17
    • 2017-12-22
    • 2020-10-06
    • 1970-01-01
    • 2018-07-08
    • 2018-04-12
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多