我需要能够即时构造和破坏 socket.io 命名空间。很容易找到如何创建名称空间的信息,但我没有找到有关如何删除/断开名称空间以释放其内存的信息。
假设我已经运行了以下代码:
var nsp = io.of('/my-namespace');
nsp.on('connection', function(socket){
console.log('someone connected'):
});
nsp.emit('hi', 'everyone!');
如何断开/删除上面创建的 socket.io 命名空间?
正如下面一些人评论的那样,这仅适用于 Socket.IO 版本
实际上,只需从服务器中删除名称空间nsps
数组,您将不会释放任何内存,并且套接字仍将保持连接,因为内存中仍然有指向命名空间的指针,因此它不会被垃圾收集...如果您想要的是完全清空资源,您应该
- 断开所有套接字与特定命名空间的连接
- 删除所有事件侦听器,因为它是 EventEmitter 扩展类
- 将其从服务器中的 nsps 数组中删除
例如
const MyNamespace = io.of('/my-namespace'); // Get Namespace
const connectedNameSpaceSockets = Object.keys(MyNamespace.connected); // Get Object with Connected SocketIds as properties
connectedNameSpaceSockets.forEach(socketId => {
MyNamespace.connected[socketId].disconnect(); // Disconnect Each socket
});
MyNamespace.removeAllListeners(); // Remove all Listeners for the event emitter
delete io.nsps['/my-namespace']; // Remove from the server namespaces
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)