Как распознать из какого потока событие было отправлено в node.js - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть поток от Db, и я сплюываю его на многие HTTP-серверы через HTTP (запрос).Чтобы разделить этот поток, я использую passThrough Все работает хорошо, но когда вызывается событие, я не знаю, какой поток его генерирует.Есть ли решение для идентификации этого потока?Я использую события error, end, data и response.В ответ у меня есть информация о хосте, но самое главное, чтобы идентифицировать ее в ошибке eventListener.

const stream = await getDataStream(id);
const passThrough = new PassThrough();
stream.pipe(objectToString).pipe(passThrough);

for (let host of hostsList) {
  startedRequestsCount++;
  host.stream
    .on('error', errorHandler)
    .on('data', dataHandler)
    .on('response', responseHandler)
    .on('end', resolveAfterAllRequests);
  passThrough.pipe(host.stream);
}

У меня много сомнений по поводу этого решения, но пока оно работает.Проблема возникает, когда я получаю сообщение об ошибке и хочу узнать, какой хост вышел из строя.

Бонусный вопрос :

Если я транслирую через HTTP, могу ли я решить проблему с обратным давлением

1 Ответ

0 голосов
/ 28 ноября 2018

При определении обработчиков используйте каррирование для получения дополнительного параметра потока:

  const errorHandler = stream => error => {
   console.log(stream, error);
 };

Затем приготовьте карри:

 host.stream
  .on('error', errorHandler(host.stream));

, чтобы убедиться, что вы можете передать несколько аргументов с этим шаблоном.

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