2016-12-27 45 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

相關問題