- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始学习 Play 2.0 框架。我无法理解的一件事是 play tutorial 中描述的 Iteratee、Enumerator 和 Enumeratee 模式。 。我对函数式语言的经验很少。
这个模式能实现什么目的?
它如何帮助我编写非阻塞/响应式(Reactive)代码?
一些简单的例子会有帮助。
最佳答案
playframework 2.0 下载附带了一些示例。其中两个有 Iteratee/Comet 示例。例如, cometd 时钟 sample app显示:
lazy val clock = Enumerator.fromCallback { () =>
Promise.timeout(Some(dateFormat.format(new Date)), 100 milliseconds)
}
然后使用方式如下:
Ok.stream(clock &> Comet(callback = "parent.clockChanged"))
它将结果以 block 的形式提供给客户端。 Enumerator
对象还具有 fromFile
、fromStream
(如 java.io.InputStream
)实用枚举器函数。
我不确定这是在哪里完成的,但假设这种分块处理不会占用线程。看到一些基准测试会非常有趣,因为迭代器的实现肯定会产生开销,因为要处理的数据以及计算被包装在各种对象中。
从枚举器提供的数据被包装,以便它可以指示还有更多数据需要处理或数据已到达末尾 (EOF)。迭代器的处理结果也被包装,以便它可以指示是否已根据某些输入计算结果或需要更多输入来计算结果。我推荐 John De Goes 的 nescala presentation这显示了从折叠到迭代的演变。编辑:Brendan McAdams 在 2012 年 Scala Days 度过了愉快的时光 presentation关于异步和非阻塞 - 在演示即将结束时(约 26 分钟),它涉及迭代器以及它如何帮助以异步方式处理数据库游标样式 IO。
Iteratees
的一个广为人知的好处是它们可以组合。以下是他们的几种组成方式:
(T) => U
类型的函数映射到 T
的枚举器上,以获取 的枚举器U
关于scala - 无法理解 Play 2.0 中的 Iteratee、Enumerator、Enumeratee,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10177666/
使用 Play 2.1-RC1 我无法编写简单的测试。 这是操作代码: def echoTestTagFromXml = Action(parse.xml) { request => (req
我想,只是为了了解一些关于 Iteratees 的知识,使用 Data.Iteratee 和 Data.Attoparsec.Iteratee 重新实现我制作的一个简单的解析器。不过,我很难过。下面我
假设我正在从 InputStream 读取内容。 我通常会如何做: val inputStream = ... try { doStuff(inputStream) } finally {
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why can’t a duplicate variable name be declared in a n
我正在为我的 Play 应用程序 Controller 编写测试用例,但在获取操作结果时遇到了问题。 val jsonresult = UserController.importOPML()(
可以使用流(惰性列表)从多个(为简单起见说两个)源中按需提取。 Iteratees 可用于处理来自单一来源的数据。 是否有类似 Iteratee 的功能概念来处理多个输入源?我可以想象一个 Itera
我正在尝试编写一个枚举器,用于使用 Scalaz 从 java.io.BufferedReader 逐行读取文件7 的 iteratee 库,目前只为 java.io.Reader 提供一个(非常慢的
首先,我了解迭代器的方式,足够了解我可以编写一个简单且有缺陷的实现,而无需引用任何现有的实现。 我真正想知道的是为什么人们似乎觉得它们如此迷人,或者在什么情况下它们的好处证明了它们的复杂性。将它们与惰
我在 Haskell 中有下一个代码,这对于读取文件的第一行很好,但我需要读取目录中文件的所有内容(许多文件递归)。我正在尝试更改 firstLineE 函数,我不明白如何更改行: EIO.enumF
在 Haskell 中,Iteratee based I/O看起来很吸引人。 Iteratees 是一种可组合的、安全的、快速的 I/O 方法,其灵感来自于函数式语言中的“fold”又名“reduce
我有一个简单的基于 attoparsec 的 pdf parser .它工作正常,直到与 iteratee 一起使用。 当输入的大小超过缓冲区大小时。 import qualified Data.By
play2中有一个play.api.libs.iteratee包,其中有一个大对象Iteratee,该行有1000多行。 为什么play2需要这么大的对象以及如何理解它? 最佳答案 我刚刚写了一篇文章
目前,有两种流行的选择来实现 iteratee pattern : enumerator package和 iteratee package . 它们的相对优势是什么?一个比另一个更好,还是取决于用例
我试图弄清楚 Lodash iteratee 的工作原理以及我将在哪里使用它。 The documentation says: Creates a function that invokes func
我希望能够创建一个可以无限重复一系列元素的枚举器,但我无法找到一种方法。当我创建递归枚举器时,当我尝试引用它时,似乎会溢出堆栈。例如,为了创建一个重复 A,B,C,D,A,B,C,D,A,B,C,D,
下划线 _.each ,有什么方法可以使用命名函数作为迭代器并向其传递参数吗? parseItems: function() { return _.each(this.items, this.pa
我正在使用 play2 和 reactivemongo 从 mongodb 获取结果。结果的每一项都需要进行转换以添加一些元数据。之后我需要对其进行一些排序。 为了处理转换步骤,我使用 enumera
我编辑了下面的代码,因为我认为我在 iter.next 问题之上错误地组合了 IterV 对象。 我正在 scalaz 中尝试使用 Iteratee,我想知道为什么以下内容不起作用。这是我所拥有的:
最近在玩scalaz.iteratee和 Play 的 iteratee .我认为 iteratee 提供模块化而不是旧的命令式 while 循环是一个好主意——目的是使用一个函数作为每个新行的处理程
我正在使用 underscorejs uniq 方法。 _.uniq( [{ name: 'a', family: 't' }, { name: 'b', family: 'n' }],
我是一名优秀的程序员,十分优秀!