scala - 在 Play 2.1 中,使用什么代替已弃用的 PushEnumerator

标签 scala playframework-2.1

PushEnumerator 在 Play 框架 2.1-RC 中已弃用。
文档告诉我改用 Concurrent.broadcast。但是,我推送的数据取决于用户,因此我无法向每个用户广播相同的数据。

换句话说, Concurrent.broadcast 会给我一个连接到许多迭代器的枚举器,而我需要许多连接到许多迭代器的枚举器。

最佳答案

下面是一个使用 Concurrent.unicast[E] 的简单示例:

// assume the following exist:
def readValueAsync(source: MySource): Future[Any]
val source: MySource = ...

// this is where the meat is:
val valueEnumerator = Concurrent.unicast[Any] {
  (channel: Concurrent.Channel[Any]) =>
    readValueAsync(source) onComplete {
      case Success(x: Any) => channel.push(x)
      case Failure(t) => channel.end(t)
    }
}

// you can then collect it using an iteratee
// since my enumerator never really ends, I only take 10 elements here
val result: List[Any] = 
  valueEnumerator through Enumeratee.take(10) run Interatee.getChunks[Any]

关于scala - 在 Play 2.1 中,使用什么代替已弃用的 PushEnumerator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14588218/

相关文章:

java - 如何管理来自在单独线程中运行的多个外部命令的多个标准输出?

java - 是否有类似 Spark 的 Kafka Streams 累加器?

mysql - 如何使用 Play 2.x 对 MySQL 数据库进行单元测试?

scala - Playframework设置取决于环境

mysql - 如何使用play框架从scala中的Mysql中获取结果之和?

scala - Play JSON组合器

java - 如何在JUnit(Play Framework)中测试删除?

scala - 如何确保资源在 Scala 中的理解中关闭

scala - 有没有一种方法可以从两个 jar 构建docker镜像,例如每个 jar 都位于其自己的层中

scala - 如何在 ScalaTest 中使用具有异步规范的夹具上下文对象?