【问题标题】:Nodejs correct way to read endless streamNodejs正确读取无尽流的方法
【发布时间】:2015-09-05 00:16:34
【问题描述】:

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

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

【问题讨论】:

  • 您使用旧式流媒体有什么原因吗?最好使用read() 而不是data 事件。
  • 并非如此。我很久以前写过这部分,直到生产为止都运行良好

标签: node.js stream buffering


【解决方案1】:

因此,使用data 事件很危险。它会尽可能快地向您转储数据。面对异步操作,这可能比你处理它的速度要快,在这种情况下你的内存使用会稳步增加。您可以使用pause/resume 轻松解决此问题:

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

如果已经有 n parseString 操作正在运行,您也可以通过暂停来添加并行性。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    相关资源
    最近更新 更多