簡體   English   中英

NestJS SSE memory 泄漏

[英]NestJS SSE memory leak

我想使用“服務器端事件”來通知所有客戶端。 我沒有找到廣播的方法,所以我決定在內部使用 Eventemitter。 這會導致 memory 泄漏。 當 sse 損壞時,我如何廣播或取消訂閱 Eventemitter(我認為這是一個糟糕的解決方案)

我的壞問題解決方案

感謝您在 StackOverFlow 上提問!

注意:如果您以文本格式而不是屏幕截圖提交代碼,下次會更好:)

從您提供的代碼來看,每次服務器觸發事件時,您都會注冊一個新的偵聽器,這將觸發事件 n^2 次發出的事件。

您有 2 個可以實施的解決方案:

  1. 檢查'channel.bindAccount'事件是否已經注冊,不要再次注冊。 我不推薦這種解決方案,但可以做到。
  2. 在你的構造函數上注冊事件並在 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 上發出它是我的想法,但是我不完全確定有效負載的確切來源並且我沒有測試代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM