PlayFramework 2.0.x->;2.1-RC迁移

PlayFramework 2.0.x->;2.1-RC迁移,playframework,playframework-2.0,playframework-2.1,Playframework,Playframework 2.0,Playframework 2.1,在播放2.0.4的程序中,我有一段代码: val channel = Enumerator.imperative[JsValue](onStart = self ! NotifyJoin(username)) 现在它说,命令式已被弃用,API说我应该使用单播或广播。我倾向于使用单播,因为在我的代码中频道是单播的。所以我喜欢 val channel = Concurrent.unicast[JsValue](onStart = self ! NotifyJoin(username)) 但是它不

在播放2.0.4的程序中,我有一段代码:

val channel = Enumerator.imperative[JsValue](onStart = self ! NotifyJoin(username))
现在它说,
命令式
已被弃用,API说我应该使用
单播
广播
。我倾向于使用
单播
,因为在我的代码中
频道
是单播的。所以我喜欢

val channel = Concurrent.unicast[JsValue](onStart = self ! NotifyJoin(username))
但是它不起作用。。看起来
unicast
想要别的东西。我无法理解-API中没有更多信息。。。有人知道在这里做什么吗

更新:


在Play Framework用户组中开始讨论。事实证明,这在开发人员中是一个非常常见的问题,他们熟悉这个范例。希望文档能够得到改进。

并发。单播的API是:

unicast[E](onStart: (Channel[E]) ⇒ Unit, onComplete: ⇒ Unit, onError: (String, Input[E]) ⇒ Unit): Enumerator[E]
broadcast[E]: (Enumerator[E], Channel[E])

并发广播的API是:

unicast[E](onStart: (Channel[E]) ⇒ Unit, onComplete: ⇒ Unit, onError: (String, Input[E]) ⇒ Unit): Enumerator[E]
broadcast[E]: (Enumerator[E], Channel[E])
您可以访问应用程序中的API,网址为:

http://localhost:9000/@documentation/api/scala/index.html#play.api.libs.iteratee.Concurrent$

使用单播的示例:

// here is an enumerator that returns a chunk to the channel
val outEnumerator = Concurrent.unicast[JsValue] { channel =>
    val data = Json.obj("data" -> 12345)
    channel.push(data)
}
使用旧Enumerator.Private的替代方法是使用generateM:

val out = Enumerator.generateM[JsValue] {
    Promise.timeout( {
        Some(Json.obj("data" -> 12345))
    }, 100, TimeUnit.MILLISECONDS )
}

这里,我们使用超时生成一个重复值。这个枚举器会永远重复,尽管generateM允许您返回None来指示何时完成。

我认为play framework 2.*.*当我们将它与1.x.x版本进行比较时,它不擅长编写文档。是的,我在网站上看到了这一点。太糟糕了,它没有说明我在哪里得到了
频道[E]
,或者
枚举器[E]
,也没有真正解释它是如何工作的。实际上,当我在API页面上时,只有这两个签名。但这并不比Eclipse默认提供的自动完成建议多多少帮助。我只是想指出一些解释是值得的。
broadcast
返回一个带有
枚举器[E]
通道[E]
的元组。这不是你需要的吗?哈哈,随你怎么叫我,但我对这种API完全不熟悉,所以我只需要一个好的文本解释,而不是签名。无论如何,Play Framework用户组中已经有一个关于此的线程。。。事实证明,很多ppl都是这个领域的新手。我知道你的意思。这方面的代码示例非常缺乏(