Nodejs正确读取无穷无尽的流的方式

时间:2015-09-05 00:16:34

标签: node.js stream buffering

我的网络应用程序通过无尽的流(或至少非常长的流)处理实时数据。我正在使用'数据'用于解析此流上的新块数据的事件。问题是当这个流存活时,我增加了内存消耗。由于我没有为此流调用.read方法,因此所有数据都存储在等待处理的流缓冲区中。所以,我想问一下,我该怎么做才能减少内存消耗?禁用此流的内部缓冲(我不需要旧数据),从innerBuffer中移除已处理的数据或通过.read方法移除mb?任何建议表示赞赏。

.on('data', function(chunk) {
     parseString(chunk, function (err, result) {
     //...
     });
})

1 个答案:

答案 0 :(得分:0)

出于这个原因,使用data事件是危险的。它会尽快将数据转储给您。面对异步操作,这可能比处理它更快,在这种情况下,您的内存使用量将稳步增加。您可以使用pause / resume

轻松解决此问题
stream.on('data', function(chunk) {
  stream.pause();
  parseString(chunk, function (err, result) {
  //...
  stream.resume();
  });
})

如果已经运行了n parseString次操作,您也可以暂停添加并行度。

您可能还希望研究通常首选的新式流。