node.js обратное давление и сток. Я столкнулся с предупреждением утечки памяти - PullRequest
0 голосов
/ 19 января 2020

В настоящее время я сам изучаю node.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

Кто-нибудь знает, как написать обработчик событий стока?
Спасибо.

1 Ответ

0 голосов
/ 03 февраля 2020

Я думаю, что следующий способ является правильным способом обработки противодавления и утечки.

const rs = getReadableStreamSomehow();
const ws = getWritableStreamSomehow();

rs.on("data", function (data) {
  if (!ws.write(data)) {
    rs.pause();
    ws.once("drain", function () {
      rs.resume();
    });
  }
});

это правильно?

если это не правильно, пожалуйста, оставьте комментарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...