在Socket IO中删除命名空间

时间:2015-06-09 14:27:02

标签: node.js namespaces socket.io typescript

here之前已经问过这个问题,但我已经实现了答案,问题仍然存在。

我正在使用typescript,我有一个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);
    }
}

1 个答案:

答案 0 :(得分:0)

对于有这个特定问题的其他人,我找到了答案。我误解了链接的问题:我没有意识到正在讨论的数组位于SocketIO中的Server对象中,而不是外部数组。此外,在本文发表时,Typescript的SocketIO .d.ts文件未定义Server对象中存在的nsps数组。我通过将属性添加到我的.d.ts文件并按照链接问题中列出的删除说明解决了这个问题。