圆形物体上的垃圾收集?

时间:2016-01-16 10:31:49

标签: javascript node.js garbage-collection

在我的ws node.js服务器中,我有它,以便当客户端连接时,它会将“用户”对象分配给它们的websocket对象,并且该用户对象内部是一个引用返回到他们的websocket对象。当我只知道他们的用户对象时,我可以将数据发送到客户端(所有游戏逻辑只处理用户对象,而不是websockets),当数据从他们的websocket对象进入时,它可以让我获得客户端的用户信息。

我听说循环对象可能导致垃圾收集永远无法清理的问题,因为它们互相引用,所以我的问题是,我需要做些什么才能确保当客户端断开连接时,他们的websocket和用户对象都会从内存中正确删除?

另外,如果我以完全错误的方式解决这个问题,请告诉我! :P

编辑代码:

function onConnect(client) {
    users.push({connected: true, client: client, name: "", messages: 0});
    client.user = users[users.length - 1];
    send("Please enter a username.", [client.user]);
}

1 个答案:

答案 0 :(得分:1)

您必须从列表中手动删除已关闭的连接。否则,垃圾收集器不会将其从内存中删除。

function onConnect(client) {
  users.push({
    connected: true,
    client: client,
    name: "",
    messages: 0
  });
  client.user = users[users.length - 1];
  client.on('close', function(){
    //remove closed connection from the list then let garbage collector does its job.
    users.splice(users.indexOf(client.user), 1);
  });
  send("Please enter a username.", [client.user]);
}