チャット アプリケーションに socket io と node を使用しています。2つの問題があります
- 1) ソケットごとの RAM 使用量の継続的な増加
- 2) ソケットを監視するために pm2 を使用しました。起動して完全に動作し、RAM 使用量が増加して 100MB を超え、その後ソケットが停止し、pm2 がソケットを自動的に再起動すると、RAM 使用量が 50MB 近くになり、ユーザーはメッセージを送信できません。
socket.on('iAmOnline', 関数(データ){
if(typeof usernames[data.id] != 'undefined'){
delete usernames[data.id];
delete onlineClients[data.id];
if(typeof isChatScreen[data.id] != 'undefined'){
delete isChatScreen[data.id];
}
}
socket.username = data.id;
usernames[data.id] = data.id
onlineClients[data.id] = socket.id;
if(typeof data.isChatScreen != 'undefined'){
isChatScreen[data.id] = data.isChatScreen;
}else{
isChatScreen[data.id] = 1;
}
if(typeof usernames[data.id] != 'undefined'){
var allChats = getChats(data.id, function(chats) {
var a = chats.pendingMessage;
var b = chats.deliveredMessage;
var c = chats.readMessage;
for(var i=0;i<a.length;i++){
socket.emit("message", {'from':a[i]['userAId'],'to':a[i]['userBId'], 'msg':a[i]['message'],'key':a[i]['uniqueKey']});
}
for(var i=0;i<b.length;i++){
socket.emit("delivered", {'from':b[i]['userBId'],'to':b[i]['userAId'], 'localId':0,'key':b[i]['uniqueKey']});
}
for(var i=0;i<c.length;i++){
socket.emit("read", {'from':c[i]['userBId'],'to':c[i]['userAId'], 'localId':0,'key':c[i]['uniqueKey']});
}
});
allChats = null;
}
});
function getChats(userId, callback){
return request({
uri: "http://twango.me/api/v1/chats?userId="+userId,
method: "GET",
timeout: 10000,
followRedirect: true,
maxRedirects: 10
}, function(error, response, body) {
callback(JSON.parse(body).response);
});
}