私の会社はいくつかの問題で苦労しています。 node.exeがメモリとCPUを使いすぎています。iisnode node.js socket.io予期しないメモリリーク
サーバは、次のようになります。
var userList = [];
/* NODE.JS */
var server = require('http').createServer(function (req, res) {
res.writeHead(200);
res.end('ok');
}).listen((process.env.PORT || 88));
/* SOCKET.IO */
//var io = require('socket.io')(server);
var io = require('socket.io')(server);
io.on('connection', function (socket) {
socket.on('connectUser', function (user) {
if (!isAuthenticated(user.user, user.pass)) {
socket.disconnect(socket.conn.id);
} else {
//Session des Users
user.session = socket.conn.id;
//if (userList.indexOf(user)== -1)
userList.push(user);
io.emit('userOnline', {onlineUser: userList});
}
});
socket.on('sendMessageToUser', function (sendObj) {
if(sendObj && sendObj.to) {
var userArr = userList.filter(function(val, index, arr) {
if(sendObj.to.indexOf(val.id) > -1)
return val;
});
userArr.forEach(function(user) {
socket.to(user.session).emit('getMessageFromUser', sendObj);
});
}
});
socket.on('disconnect', function() {
userList = userList.filter(function(val, index, arr) {
if(val.session !== socket.conn.id)
return val;
});
io.emit('userOnline', {onlineUser: userList});
});
});
function isAuthenticated(user, pass) {
return true;
}
ユーザーが接続する(各ページの訪問は)サーバーへの接続になりますとき。 userList
には、そのユーザーに関する情報が入力されます。ページを離れるかリフレッシュすると、ユーザーはそのオブジェクトから削除されます。
サーバーは、別のnode.jsアプリケーションもホストします。私のスクリプトを起動した後、もう一方のアプリケーションはメモリとCPUにも上昇しています!
誰でもこれがバグであることを確認できますか?あるいは、私は2つのアプリケーションを別々に扱わなければならないのですか?
は、私のサーバーは、次のようになります。 iisnode(V 0.2.18.0) ノード(V 0.12.4) NPM(V 2.10.1) socket.io(V 1.3.5)私が知っている
それらのほとんどは本当に時代遅れです!私はiisnodeで現在のバージョンをテストする時間がなかった。
あなたの返信のための最初のおかげで!上記の例でわかるように、私は切断時に削除しています - オブジェクトはconn.idのフィルタ関数で減らされます 後であなたのサイトを見ていきます。 – webprogrammer