2016-12-27 54 views
3

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

这里是我的示例回调:玩家

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

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

    }; 

这里是增加玩家列表/ HashSet的:

this.list[socket.id] = new Player(socket); 

这里是删除:

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

https://www.alexkras.com/simple-guide-to-finding-a-javascript-memory-leak-in-node-js/ 我只是撇去这个,但它听起来像你可能忘了删除所有对东西的引用。 –

+0

“删除”是什么意思?从哪里解开它?你真正需要做的是从触发事件的地方删除对套接字的引用。 – Bergi

+0

我有球员列表,我执行像这样删除:delete this.list [socket.id]; – peterSweter

回答

2

当没有引用实例EventEmitter(如套接字),它的垃圾回收收集。

+0

好的,但是我在这个回调中引用了Player对象,并且player对象保持对套接字的引用。它仍然被收集? – peterSweter

+1

如果有任何对象引用它不是垃圾回收 –

+0

从播放列表中删除播放器对象后,除了套接字回调,无法从程序到达套接字。我是否需要取消绑定此套接字或创建某种socket.disconect()? – peterSweter

相关问题