问题标签 [iterate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
142 浏览

scala - Playframework 并行渲染

我想在一个动作中并行处理多个任务,并在完成后立即按最先完成的顺序推回任何任务结果。

例如,如果任务 A 在 5 秒内完成,任务 B 在 3 秒内完成,任务 C 在 1 秒内完成,则输出应为“C”、“B”、“A”。

以下代码似乎输出错误的顺序,并在输出结果之前等待所有任务完成。

0 投票
1 回答
1513 浏览

scala - 使用 Play 2.3 Websocket 的私人聊天应用程序

我正在使用 WebSockets 开发一个聊天应用程序(在带有 scala 的 Play 2.3 中)。必须根据传入消息将消息广播给所有用户或特定用户组。一个用户可以参与多个群聊,并且能够同时与个人聊天。

Concurrent.broadcast[JsValue]返回元组(enumerator, channel)。我不知道如何对这个频道应用过滤器,所以只有特定的客户组会收到消息。

我们可以在枚举器上应用过滤器,例如 (enumerator &> Enumeratee.filter[JsValue] {...} )。但是我们不能通过这个枚举器推送消息。

我不想在客户端解析消息。我的代码看起来像这样,

我在网上找到的大多数示例都使用了已弃用的方法,其中一些在 Play 2.3 中被删除(如 Enumerators.imperative)。我不知道如何Concurrent.unicast工作。

我想知道是否有另一种使用 Actors 的方法来做同样的事情。我也想知道,这种设计将处理更高的负载(超过 1000 个用户)。谢谢你。

0 投票
4 回答
3113 浏览

scala - 在 Play Framework WebSockets 中广播消息

我正在使用 Play Framework WebSockets 推送消息Concurrent.unicast[JsValue],并且我想优化向多个用户发送相同的消息。是否可以使用多种方式广播消息Concurrent.Channel

0 投票
1 回答
273 浏览

scala - Scala Play `Enumerators`:推还是拉?

我真的很难理解 Play 的Iteratees 和Enumerators 的基本目的。

我读了

我阅读了这个答案,发现它不是依赖拉模型,InputStream而是使用推模型。

Iteratees 是一种有趣的野兽——一方面,它将数据“推送”到处理程序,而不是依赖处理程序来提取数据,因此具有更好的性能。另一方面,它允许处理程序控制何时应该停止流。

但是 Play 在Iteratees 上的文档说

或者更一般地枚举java.io.InputStreamusing Enumerator.fromStream。重要的是要注意,在应用此 Enumerator 的迭代对象准备好接受更多输入之前,不会读取输入。

等等……那到底是怎么回事?

数据是由 推Enumerator还是由 拉Iteratee?(即谁决定何时计算更多数据)

0 投票
2 回答
1754 浏览

scala - 如何在 Play 2.1 中使用带有分块响应的 OutputStreams

我需要使用java.util.zip.ZipOutputStream压缩文件存档来响应。

未压缩的数据有几百兆字节,所以我想尽可能少地存储它。它来自 SQL 结果的序列化。

我看到使用 anOutputStream返回分块结果的示例Enumerator.outputStream

但是当我阅读文档时,这些似乎是不明智的(强调我的)

使用 OutputStream 创建一个字节枚举器。

并不是说 write 调用不会阻塞,因此如果被馈送到的迭代器消耗输入的速度很慢,则 OutputStream 不会推回。这意味着它不应该与大型流一起使用,因为存在内存不足的风险

显然,我不能使用它。或者至少不是没有修改。


如何使用OutputStream(在本例中为 gzip 压缩存档)创建响应,同时确保只有部分响应存储在内存中?

InputStream我认识到s/ OutputStreams 和 Play 的Enumerator/范式之间的区别Iteratee,所以我希望会有一种特定的方式来生成我的源数据(SQL 结果的序列化),这样它就不会超过下载速度。我不知道那是什么。

0 投票
1 回答
72 浏览

scala - Iteratee 获取分块数据(Scala)

我有很多数据,这些数据是通过游标从 db 获得的(例如 200 万个条目),现在我正在使用Iteratee.foreach,但我想优化和操作对象数组。是否可以对某些块进行操作,例如读取 1000 个文档,然后运行我的代码。

0 投票
1 回答
261 浏览

playframework - Reactivemongo:如何处理 Iteratee.fold 内部发生的异常

似乎 reacitvemongo 枚举器没有正确处理异常。下面的代码使用一个枚举器(由 reactivemongo 驱动程序返回)来创建一个列表,这里的问题是,当 fold 函数内部出现异常时,请求挂起并且浏览器根本没有得到响应(加载器无限旋转)

它甚至无法从失败的执行中恢复。

我在这里遗漏了一些东西,或者它是 reactivemongo enumerator 中的错误?

0 投票
1 回答
206 浏览

scala - Iteratees 管理资源是否安全?

假设我正在阅读一个InputStream.

我通常会怎么做:

无论是否doStuff抛出异常,我们都会关闭InputStream.


我将如何使用迭代器:

InputStream被关闭(即使doStuff抛出异常)?

一个小测试:

我们只看到:

溪流从未关闭。替换1 / 01 / 1,您会看到流关闭。

当然,我可以保持对原始流的引用并在失败时关闭它,但 AFAIK 使用 iteratees 的想法是创建可组合的迭代而不必这样做。


  1. 这是预期的行为吗?

  2. 有没有办法使用迭代器,以便始终正确处理资源?

0 投票
1 回答
58 浏览

playframework - 如何从枚举器中删除 EOF

我想连接两个Enumerators。问题是,>>>如果andThen第一个有EOF.

我想我应该放弃EOF,但我不知道如何干净地做到这一点。

我想有一种常见的惯用方式可以做到这一点。它是什么?

0 投票
1 回答
424 浏览

scala - 为什么我们需要 scalaz.stream 而不是 iteratee?

最近,我一直在玩scalaz.iteratee和 Play 的iteratee。我认为 iteratee 是提供模块化而不是旧的命令式 while 循环的好主意——目的是使用一个函数作为每个新行的处理程序,而不是从文件中获取 string[]。

但是,当我查看 scalaz.stream 的功能概述时,它提到了它的设计是为了取代旧的 iteratee implementation,但没有提到他们为什么要替换它。

有人可以向我解释一下,如果我们可以 Stream,我们可以获得哪些功能和好处,以及使用 iteratee 的缺点是什么?