【发布时间】:2015-04-30 16:20:24
【问题描述】:
我在这个示例中使用 Socket.IO:
io.sockets.on("connection", function (socket) {
myService.on("myevent", function() {
socket.emit("myevent", { /* ... */ });
// some stuff happens here of course
});
});
myService 是一个单例和EventEmitter 的子类,它会随着时间的推移触发myevent。一切正常,但是我想在这种情况下我会造成某种泄漏。一旦连接被破坏,我的服务如何知道它不需要调用处理程序?是否有某种销毁事件我可以捕获然后从myService 中删除处理程序?
【问题讨论】:
-
目前尚不清楚
myService是什么,它的生命周期是什么,甚至与套接字有什么关系。myService是单例什么的?您可以监视disconnect事件并在那里做一些事情。 -
正如我的问题中提到的
myService是一个单身。 -
单身什么?它是什么类型的对象?它有什么作用?它有哪些方法?它与插座有什么关系?单例仅意味着只有其中一个。它没有告诉我们它是什么类型的对象,它的用途是什么以及它是如何使用的?您在这里只披露了大约 1/3 的相关问题。
-
是的,如果套接字连接,然后断开连接并且未删除相关的 myService 事件处理程序,您确实会出现内存泄漏。您的
myService.on()事件处理程序将保留对socket的关闭引用,即使它早已关闭。我们必须知道 myService 是什么以及如何从中删除事件处理程序才能知道建议什么。 -
@jfried00:无论如何,这是一个笼统的问题,所以不需要知道它的目的或它是哪种类型的对象。当谈到单例时,我的意思是一个对象,它被实例化一次,然后在整个进程生命周期中保持,并在需要它的所有地方重用。
标签: javascript node.js socket.io