【发布时间】:2016-05-01 16:33:49
【问题描述】:
我有一个代码设置,我想知道它是否被垃圾收集,这样我的系统就不会开始交换和冻结/崩溃。
假设您保持在系统的正常参数范围内,设置应该能够运行不确定的时间(例如,因此不要同时将 1.000.000 个用户连接到一个单线程进程)
我做了一个简化版。
// connection.js
var io, Handler;
io = require('socket.io');
Handler = require('./handler');
io.on('connection', function (socket) {
new Handler({socket: socket})
});
// handler.js
var Handler,
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
function Handler(arg) {
this.socket = arg.socket;
this.test = bind(this.test, this);
console.log('Handler', 'New connection', this.socket.id);
this.listeners();
}
Handler.prototype.listeners = function() {
return this.socket.on('test', this.test);
};
Handler.prototype.test = function() {
return console.log('SocketIO', 'test', this.socket.id);
};
module.exports = Handler;
那么“新处理程序”在“套接字断开事件”发生后收集垃圾?
如果不是我应该如何更改代码?
一开始我以为这样可以解决问题
var io, connections, Handler;
io = require('socket.io');
Handler = require('./handler');
connections = {}
io.on('connection', function (socket) {
connections[socket.id] = new Handler({socket: socket});
socket.on('disconnect', function (){
connections[socket.id] = null
})
});
但这只会创建对“新处理程序”的引用,并在断开连接时删除相同的引用。这并不一定意味着“新处理程序”也将被删除。它可能仍在监听和/或做事。
【问题讨论】:
标签: javascript node.js socket.io garbage-collection