在我的node.js服务器的内存堆快照中,我注意到由于此函数产生的字符串,我正在泄漏大量的内存:
User.prototype._friends = function(friends) {
this.friends = friends;
this.send(JSON.stringify({
type: 'hello',
username: this.data('username'),
friends: friends
}));
};
这是另外两个发送功能。它从.send到._send。
User.prototype.send = function(code, message, callback) {
this._send('listener', code, message, callback);
};
User.prototype._send = function(type, code, message, callback) {
if(!message && typeof code != 'number') {
callback = message;
message = code;
code = 200;
}
if(typeof message != 'string')
message = JSON.stringify(message);
if(type == 'connection' && this.connection) {
this.connection.writeHead(code || 200, {
'Content-Type': 'application/json',
'Content-Length': message.length
});
this.connection.end(message);
message = null;
return;
} else {
if(!this.listeners.length) //???? WHY
return this.message_queue.push(arguments);
var cx = this.listeners.slice(), conn;
this.listeners = [];
while(conn = cx.shift()) {
conn.writeHead(code || 200, {
'Content-Type': 'application/json',
'Content-Length': message.length
});
conn.end(message);
}
if(callback) {
callback();
message = null;
}
else{//added this in...
message = null;
return;
}
}
};
占用大部分内存的消息类型为“Hello”。 _friends由另一个中间件文件中的代码调用,该文件将通过Ajax调用从php服务器放入信息。不确定那是多么相关,因为内存泄漏看起来像是在那一步之后。任何指向正确方向的人都会非常感激。