在我的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]);
}
答案 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]);
}