【发布时间】:2017-10-31 04:01:47
【问题描述】:
我再次尝试更新一些 Play 2.5 之前的代码(基于此 vid)。例如以下曾经是如何流式传输 Future:
Ok.chunked(Enumerator.generateM(Promise.timeout(Some("hello"), 500)))
我使用Akka为Promise.timeout(已弃用)创建了以下解决方法:
private def keepResponding(data: String, delay: FiniteDuration, interval: FiniteDuration): Future[Result] = {
val promise: Promise[Result] = Promise[Result]()
actorSystem.scheduler.schedule(delay, interval) { promise.success(Ok(data)) }
promise.future
}
根据Play Framework Migration Guide; Enumerators 应该重写为源代码,而Source.unfoldAsync 显然等同于Enumerator.generateM,所以我希望这会起作用(其中str 是Future[String]):
def inf = Action { request =>
val str = keepResponding("stream me", 1.second, 2.second)
Ok.chunked(Source.unfoldAsync(str))
}
当然,在查看 unfoldAsync 的案例类签名时,我遇到了 类型不匹配 错误:
final class UnfoldAsync[S, E](s: S, f: S ⇒ Future[Option[(S, E)]])
我可以看到参数不正确,但我不完全理解我应该通过什么/如何传递它。
【问题讨论】:
标签: scala playframework streaming akka akka-stream