scala - 如何在 Play 中使用 Akka Streams 将消息从 websocket 客户端发送到 Akka Source
问题描述
我有一个使用 Play Akka WebSocket 流式传输数字的 Akka Source。websocket 客户端可以发送过滤消息如 0 或 1 来获取偶数或奇数消息。
我不明白如何将过滤器发送到源。
感谢任何反馈
def numbersSource(filter: Int) =
Source(1 to 1000)
.throttle(1, 1.second, 1, ThrottleMode.Shaping)
.filter{ e =>
filter match {
case 0 =>
e % 2 == 0
case 1 =>
e % 2 != 0
case _ =>
true
}
}.map(_.toString)
def testFlow(): Flow[String, String, NotUsed] = {
Flow[String]
.filter { msg =>
//message from ws client
println(">>"+ msg)
//validate
msg != null && !msg.isEmpty
}
.via(Flow.fromSinkAndSourceCoupled(Sink.ignore, numbersSource(1)))
}
def testWSFlow ():WebSocket = {
WebSocket.acceptOrResult[String, String] {
case rh if sameOriginCheck(rh) =>
Future.successful(
Right(testFlow()))
case rejected =>
LOGGER.error(s"Request $rejected failed same origin check")
Future.successful {
Left(Forbidden("forbidden"))
}
}
}
解决方案
推荐阅读
- google-chrome - 无法从 RTCPeerConnection 获取 IP V4 地址 - chrome
- arrays - 在本机反应中从数组中删除数据
- node.js - 当我以相同的顺序使用 values(a,b) 传递 a,b 时,如何将 [ab] 作为我的输出?
- android - gradle 未解决的依赖
- python - Pytorch 中的批量矩阵乘法 - 对输出维度的处理感到困惑
- c# - 更改数据库架构和实体时单元测试失败,但单元测试未更改
- c# - MS Graph 循环遍历 IListItemsCollectionPage 中的每个项目
- javascript - 为焦点上的jquery可拖动元素添加边框
- r - 如何在 geom_density 上指定两条具有不同颜色和形状的曲线
- java - 有什么方法可以加密外部 SD 卡上的 SQLite 数据库?