【问题标题】:Implementing producers/consumers with bacon.js event stream pool使用 bacon.js 事件流池实现生产者/消费者
【发布时间】:2014-05-24 23:17:01
【问题描述】:

我想用一个 bacon.js 事件流池来实现生产者消费者模式。这是我要解决的具体问题:

我有一个“n”个网址列表。我想创建事件流来为这些 url 发出 http 请求,但我想一次将其限制为 'x' 流('x' 网络请求)。 在上述流的事件处理程序中,我创建了一个将 http 响应写入文件的新事件流。但我想一次将写入文件的流数限制为“y”。

在 Gevent/Java 中,我会创建适当大小的线程池并使用适当线程池中的线程。我如何为事件流做类似的事情?

【问题讨论】:

标签: javascript threadpool producer-consumer bacon.js event-stream


【解决方案1】:

使用flatMapWithConcurrencyLimit,您将能够控制生成的流的数量:

function fetchUsingHttp(url) { .. } // <- returns EventStream of http result
function writeToFile(data) { .. } // <- returns EventStream of file write result
var urls; // <- EventStream of urls
var maxRequests, maxWrites; // <- maximum concurrency limits
var httpResults = urls.flatMapWithConcurrencyLimit(maxRequests, fetchUsingHttp)
var fileWriteResults = httpResults.flatMapWithConcurrencyLimit(maxWrites, writeToFile)
fileWriteResults.log()

【讨论】:

  • 完美!最后一件事 - url 列表来自单个事件(http 响应)。如何从单个列表创建单个 url 流?
  • Bacon.fromArray(things) 会给你一个东西流。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
相关资源
最近更新 更多