Node.js(Nest.js)中SSE过期连接响应对象的处理方案
SSE内存泄漏与订阅者清理问题
场景描述
项目采用SSE连接流程,将SSE响应对象存储在本地内存中用于通知客户端,存储格式如下:
memory = {"transactionId": [array of subscribers]}
每个transactionId可对应多个订阅者,当指定事务发生事件时,会通知该事务下的所有订阅者。
当前问题
为防止内存泄漏,需要清理内存中的无效订阅对象。目前通过subscriber.writable属性判断事务是否存在活跃订阅者,进而删除无活跃订阅的事务,但发现即使客户端销毁/关闭流,writable属性始终为true,导致内存从未被清理。
核心疑问
需要找到一种在无法向任何订阅者写入时删除transactionId的方法,具体疑问如下:
- 能否使用
subscriber.destroyed属性作为判断依据? - 若
destroyed为true,是否可以确定该流已无法再被使用、可安全从内存中删除? - 客户端重连时,是否会生成同一个流对象?
内容的提问来源于stack exchange,提问作者Rohan Gaonkar
相关产品推荐
相关产品推荐

