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