首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PlayFramework 2.0.x -> 2.1-RC迁移

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

Stack Overflow用户
提问于 2013-01-03 15:01:15
回答 2查看 596关注 0票数 5

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

代码语言:javascript
运行
复制
val channel = Enumerator.imperative[JsValue](onStart = self ! NotifyJoin(username))

现在它说不推荐imperative,API说我应该使用unicastbroadcast。我倾向于使用unicast,因为在我的代码中,channel是单播。所以我就像

代码语言:javascript
运行
复制
val channel = Concurrent.unicast[JsValue](onStart = self ! NotifyJoin(username))

但不管用..。看来unicast还想要别的东西。我搞不懂-API里没有更多的信息.有人知道这里该怎么做吗?

更新:

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

EN

回答 2

Stack Overflow用户

发布于 2013-01-14 03:57:29

Concurrent.unicast的API是:

代码语言:javascript
运行
复制
unicast[E](onStart: (Channel[E]) ⇒ Unit, onComplete: ⇒ Unit, onError: (String, Input[E]) ⇒ Unit): Enumerator[E]

Concurrent.broadcast的API是:

代码语言:javascript
运行
复制
broadcast[E]: (Enumerator[E], Channel[E])

您可以在以下位置访问应用程序中的API:

代码语言:javascript
运行
复制
http://localhost:9000/@documentation/api/scala/index.html#play.api.libs.iteratee.Concurrent$
票数 3
EN

Stack Overflow用户

发布于 2013-04-18 14:03:39

使用Unicast的示例:

代码语言:javascript
运行
复制
// 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.imperative的另一种方法是使用generateM:

代码语言:javascript
运行
复制
val out = Enumerator.generateM[JsValue] {
    Promise.timeout( {
        Some(Json.obj("data" -> 12345))
    }, 100, TimeUnit.MILLISECONDS )
}

在这里,我们使用超时生成一个重复的值。此枚举数将永远重复,尽管generateM允许您返回None以指示何时完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14141408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档