Javascript 删除套接字之前是否需要取消绑定回调?

Javascript 删除套接字之前是否需要取消绑定回调?,javascript,node.js,Javascript,Node.js,我的js多人游戏内存泄漏。当客户端连接到服务器时,我绑定了很多回调。我的问题是,在从玩家表中删除套接字之前,是否必须取消绑定回调 以下是我的回调示例: Player.prototype.viewPortListenerInit = function(){ var self = this; this.socket.on('clientViewPortResize', function(data){ self.clientViewPort = data; }); };

我的js多人游戏内存泄漏。当客户端连接到服务器时,我绑定了很多回调。我的问题是,在从玩家表中删除套接字之前,是否必须取消绑定回调

以下是我的回调示例:

 Player.prototype.viewPortListenerInit = function(){
  var self = this;

  this.socket.on('clientViewPortResize', function(data){
    self.clientViewPort = data;
  });

  };
以下是将玩家添加到玩家列表/哈希集:

this.list[socket.id] = new Player(socket);
以下是删除:

socket.on('disconnect', function(){
       delete this.list[socket.id]
});

当没有引用instance
EventEmitter
(比如socket)时,它的回调会被垃圾收集。

我只是略读了一下,但听起来你可能忘了删除对stuff的所有引用。你说的“删除”是什么意思?你从哪里解开它?您真正需要做的是删除对触发事件的套接字的引用;也许你应该发布从列表中添加和删除的代码。我给出了一个答案,假设它是一个数组。你确定你已经删除了对播放器对象的所有引用吗?好的,但是我在这个回调中有对播放器对象的引用,播放器对象保留对套接字的引用。是否仍要收集?如果存在对某个对象的引用,则该对象不会被垃圾收集。从播放器列表中删除播放器对象后,除了通过套接字回调之外,无法从程序访问套接字。是否需要解除此套接字的绑定或生成某种类型的socket.disconnect()?即使引用是某个函数的本地引用,如果该引用仍然存在,它也会阻止垃圾收集。不知道你说的套接字回调是什么意思。引用是否存在?“即使引用是某个函数的本地引用,如果该引用仍然存在,它也会阻止垃圾收集”-垃圾收集并不像引用计数那么简单-如果回调函数持有对对象的唯一引用,然后回调函数可以被垃圾收集,然后对象也被垃圾收集。因此,您不必解除回调绑定,我建议使用其他技术来跟踪内存泄漏-阅读以下文章: