Я хочу использовать «События на стороне сервера», чтобы уведомлять всех клиентов. Я не нашел способа сделать трансляцию, поэтому решил использовать Eventemitter для внутреннего использования. Это вызывает утечку памяти. Как я могу транслировать или отписаться от Eventemitter, когда sse сломан (я думаю, что это плохое решение)
спасибо, что задали вопрос на StackOverFlow!
ПРИМЕЧАНИЕ. В следующий раз будет лучше, если вы отправите свой код в текстовом формате, а не в скриншоте :)
Судя по предоставленному вами коду, вы регистрируете нового слушателя каждый раз, когда сервер запускает событие, которое будет запускать событие n ^ 2 раза из созданных событий.
У вас есть 2 решения, которые вы можете реализовать:
'channel.bindAccount'
, и не регистрируйтесь повторно. Я бы не рекомендовал это решение, но это можно сделать.constructor() {
const event = new Subject<MessageEvent>();
this.eventEmitter.on('channel.bindAccount', (payload) => {
console.info(payload);
event.next({data: payload} as MessageEvent);
});
}
@Public()
@Sse('event')
event(): Observable<MessageEvent> {
this.eventEmitter.emit('channel.bindAccount', (payload));
}
Идея заключается в том, чтобы зарегистрировать событие в конструкторе и отправить его на sse, однако я не совсем уверен, откуда именно берется полезная нагрузка, и я не тестировал код.
Большое спасибо! Решение было действительно очень простым, переместите источник событий в конструктор.