删除 Socket IO 中的命名空间
Deleting namespace in Socket IO
这个问题在here之前有人问过,但我已经实施了答案,问题仍然存在。
我在打字稿中工作,我有一个 Room class 封装了一个命名空间(除其他外),还有一个 RoomManager class 维护房间列表。我最近添加了一个功能,即在用户数达到 0 时从房间列表中删除房间。在房间内,它将命名空间字段设置为 null。该房间已从管理器中删除。但是,当我稍后再次创建命名空间时,我 运行 遇到了一些问题,我发现这些问题表明多个命名空间具有相同的名称。
链接的答案指出,从数组中删除命名空间会删除它,但我的情况导致命名空间无法消失。我对垃圾收集知之甚少,但这是我对问题所在的毫无根据的猜测。如果需要,我很乐意 post 一些代码和更多细节。
编辑:添加一些代码:
房间建设者:
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);
}
}
对于遇到此特定问题的任何其他人,我找到了答案。我误解了链接的问题:我没有意识到正在讨论的数组位于 SocketIO 的服务器对象中,而不是外部数组。此外,在此 post 时,Typescript 的 SocketIO .d.ts 文件未定义服务器对象中存在的 nsps 数组。我通过将 属性 添加到我的 .d.ts 文件并按照链接问题中概述的删除说明解决了这个问题。
这个问题在here之前有人问过,但我已经实施了答案,问题仍然存在。
我在打字稿中工作,我有一个 Room class 封装了一个命名空间(除其他外),还有一个 RoomManager class 维护房间列表。我最近添加了一个功能,即在用户数达到 0 时从房间列表中删除房间。在房间内,它将命名空间字段设置为 null。该房间已从管理器中删除。但是,当我稍后再次创建命名空间时,我 运行 遇到了一些问题,我发现这些问题表明多个命名空间具有相同的名称。
链接的答案指出,从数组中删除命名空间会删除它,但我的情况导致命名空间无法消失。我对垃圾收集知之甚少,但这是我对问题所在的毫无根据的猜测。如果需要,我很乐意 post 一些代码和更多细节。
编辑:添加一些代码: 房间建设者:
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);
}
}
对于遇到此特定问题的任何其他人,我找到了答案。我误解了链接的问题:我没有意识到正在讨论的数组位于 SocketIO 的服务器对象中,而不是外部数组。此外,在此 post 时,Typescript 的 SocketIO .d.ts 文件未定义服务器对象中存在的 nsps 数组。我通过将 属性 添加到我的 .d.ts 文件并按照链接问题中概述的删除说明解决了这个问题。