我想用bacon.js事件流池实现生产者消费者模式。这是我要解决的具体问题:
我有一个'n'网址列表。我想创建事件流来为这些网址发出http请求,但我想一次将其限制为'x'流('x'网络请求)。 在上述流的事件处理程序中,我创建了一个将http响应写入文件的新事件流。但是我想一次将写入文件的流的数量限制为'y'。
在Gevent / Java中,我创建了适当大小的线程池,并使用相应线程池中的线程。我如何为事件流做类似的事情?
答案 0 :(得分: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()