【发布时间】:2015-08-24 10:37:02
【问题描述】:
这个问题在here之前有人问过,但是我已经实现了答案,问题依然存在。
我正在使用打字稿,我有一个封装命名空间(除其他外)的 Room 类,以及一个维护房间列表的 RoomManager 类。我最近添加了一个功能,即在用户计数达到 0 时从房间列表中删除一个房间。在房间内,它将命名空间字段设置为 null。房间从经理那里移除。但是,当我稍后再次创建命名空间时,我遇到了一些问题,我发现这些问题表明多个命名空间具有相同的名称。
链接的答案指出,从数组中删除命名空间会删除它,但我的情况是阻止命名空间消失。我对垃圾收集知之甚少,但这是我对问题所在的未受教育的猜测。如果需要,我很乐意发布一些代码和更多细节。
编辑:添加一些代码: 房间构造器:
constructor(namespace: SocketIO.Namespace, manager: roomManager) {
this.users = new Array();
this.manager = manager;
var room = this;
namespace.on('connection', function(socket) {
//socket events that use the room reference to the object to complete tasks
}
this.namespace = namespace;
}
删除命名空间的函数和从数组中删除房间的函数:
removeUser(user: User){
var index: number = this.users.indexOf(user);
if (index > -1){
this.users.splice(index, 1);
}
if (this.users.length < 1){
this.namespace = null;
this.manager.removeRoom(this);
}
}
removeRoom(room: Room){
var index: number = this.rooms.indexOf(room);
if (index > -1){
this.rooms.splice(index, 1);
}
}
【问题讨论】:
-
到目前为止,您已经很好地解释了您的问题,但是,如果没有代码,我们将无法提供对未来访问者有用的任何帮助(我们所能做的就是推测/猜测问题所在可能是。)
-
感谢提示,已更新
-
user到底是什么?一个东西?一个字符串?你确定它被正确地从阵列中移除了吗? -
对不起,用户是另一个类。它封装了一个套接字和一个用户名。
-
那么,它是否与存储在数组中的对象完全相同?不只是相同的结构,而且实际上是相同的对象?两个不同的对象,即使相同,也不相等。例如,
var x = {foo:1}, y = {foo:1}; x===y; // false
标签: node.js namespaces socket.io typescript