Nodejs正确读取无尽流的方法
Nodejs correct way to read endless stream
我有一个网络应用程序,可以通过无尽的流(或至少是非常长的流)处理实时数据。我正在使用 'data' 事件来解析此流上的新块数据。问题是当这个流存在时我的内存消耗增加了。由于我没有为此流调用 .read 方法,所有数据都存储在流缓冲区中等待处理。那么,我想问一下,有什么办法可以减少我的内存消耗呢?禁用此流的内部缓冲(我不需要旧数据),从 innerBuffer 或 mb 中删除处理后的数据,通过 .read 方法工作?任何建议表示赞赏。
.on('data', function(chunk) {
parseString(chunk, function (err, result) {
//...
});
})
因此使用 data
事件是危险的。它会尽可能快地向您转储数据。面对异步操作,这可能比你处理它的速度更快,在这种情况下你的内存使用量会稳步增加。您可以使用 pause
/resume
:
轻松解决此问题
stream.on('data', function(chunk) {
stream.pause();
parseString(chunk, function (err, result) {
//...
stream.resume();
});
})
如果已经有 n
parseString
个操作,您也可以通过暂停来添加并行性 运行.
您可能还希望查看通常首选的新型流。
我有一个网络应用程序,可以通过无尽的流(或至少是非常长的流)处理实时数据。我正在使用 'data' 事件来解析此流上的新块数据。问题是当这个流存在时我的内存消耗增加了。由于我没有为此流调用 .read 方法,所有数据都存储在流缓冲区中等待处理。那么,我想问一下,有什么办法可以减少我的内存消耗呢?禁用此流的内部缓冲(我不需要旧数据),从 innerBuffer 或 mb 中删除处理后的数据,通过 .read 方法工作?任何建议表示赞赏。
.on('data', function(chunk) {
parseString(chunk, function (err, result) {
//...
});
})
因此使用 data
事件是危险的。它会尽可能快地向您转储数据。面对异步操作,这可能比你处理它的速度更快,在这种情况下你的内存使用量会稳步增加。您可以使用 pause
/resume
:
stream.on('data', function(chunk) {
stream.pause();
parseString(chunk, function (err, result) {
//...
stream.resume();
});
})
如果已经有 n
parseString
个操作,您也可以通过暂停来添加并行性 运行.
您可能还希望查看通常首选的新型流。