NodeJS NestJS SSE内存泄漏

o8x7eapl  于 2023-02-03  发布在  Node.js
关注(0)|答案(1)|浏览(282)

我想使用“服务器端事件”通知所有客户端。我没有找到做广播的方法,所以我决定在内部使用Eventitter。这会导致内存泄漏。当sse坏了的时候,我如何广播或取消订阅Eventitter(我认为这是一个糟糕的解决方案)
My bad problem solution

hl0ma9xz

hl0ma9xz1#

感谢您在StackOverflow上提问!
注意:如果您以文本格式而不是截图提交代码,下次会更好:)
根据您提供的代码判断,每次Event被服务器触发时,您都要注册一个新的侦听器,这将在发出的事件中触发n^2次事件。
您可以实施两种解决方案:
1.检查'channel.bindAccount'事件是否已经注册,不要再注册。我不推荐这个解决方案,但它可以做到。
1.在构造函数中注册事件并在sse中发出该事件。示例代码:

constructor() {
  const event = new Subject<MessageEvent>();
  this.eventEmitter.on('channel.bindAccount', (payload) => {
    console.log(payload);
    event.next({data: payload} as MessageEvent);
  });
}
@Public()
@Sse('event')
event(): Observable<MessageEvent> {
  this.eventEmitter.emit('channel.bindAccount', (payload));
}

在构造函数中注册事件并在sse上发出它是一个想法,但是我不完全确定有效负载的确切来源,也没有测试代码。

相关问题