我目前正在研究节点.js我自己背压。
我不打算使用.pipe()
或.pipeline()
因为我想了解背压和排水事件。
但我不知道如何编写适当的排水处理程序。
让我们看看下面的代码。
"use strict";
const rs = getReadableStreamSomehow();
const ws = getWritableStreamSomehow();
rs.on("data", function handler(data) {
if (!ws.write(data)) {
ws.once("drain", handler);
}
});
似乎上面的源代码有一些问题。 因为我遇到了来自控制台的内存泄漏警告。
(node:29788) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 drain listeners added to [WriteStream]. Use emitter.setMaxListeners() to increase limit
有没有人知道如何编写 drain 事件处理程序?
谢谢。
我认为以下是处理背压和排水事件的正确方法。
const rs = getReadableStreamSomehow();
const ws = getWritableStreamSomehow();
rs.on("data", function (data) {
if (!ws.write(data)) {
rs.pause();
ws.once("drain", function () {
rs.resume();
});
}
});
正确吗?
如果不正确,请发表评论。