循环对象上的垃圾回收
Garbage Collection on circular objects?
在我的ws node.js服务器中,我有它,以便当客户端连接时,它会将"user"对象分配给他们的websocket对象,并且在该用户对象内部是对其websocket对象的引用。这允许我在只知道客户端的用户对象时将数据发送到客户端(所有游戏逻辑仅处理用户对象,而不处理 websocket),并且当数据来自其 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]);
}
您必须手动从列表中删除已关闭的连接。否则,垃圾回收器不会从内存中删除它们。
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]);
}
相关文章:
- 循环遍历以数组为值的Javascript对象
- json对象中缺少对象循环
- 如何循环通过2个对象数组并通过匹配id进行合并
- 如何使用自定义辅助对象(handler)实现嵌套的每个循环
- 如何在javascript中循环并将JSON对象放入数组中
- 对象/数组和循环上的原型
- foreach对象循环添加到堆栈顶部
- javascript 中的框架对象循环是未定义的
- JavaScript 对象循环替换信息
- 为什么不是'这个对象循环不起作用
- 在一行中使用对象循环和数组循环
- 将从节点promise返回的对象循环到下一个.then
- 通过javascript对象循环将键转换为字符串
- 从对象循环中排除元素
- 如何在对象循环中跳过键
- javascript中的对象循环
- 动态地从对象循环键传递属性引用
- Javascript对象循环只是将最后迭代的元素追加到另一个对象
- 通过JSON对象循环后动态分配变量
- 从Javascript对象循环动态创建的表单.如何将数据保存回对象