一段时间后,node.js中的Socket.io变得反应迟钝

时间:2015-09-26 11:11:06

标签: javascript mysql node.js sockets

我正在尝试使用websockets动态更新我网站上当前在线成员的列表。当客户连接时,除了维护一系列当前在线成员外,我还在更新“在线用户”。 mysql数据库中的表。我正在使用带有express框架的socket.io来实现websockets。 当我运行服务器时,服务器运行良好一段时间,然后变得反应迟钝。 任何人都可以帮助我解决代码中出现的问题。

    //global variables
var onlineUsers={};
var onlineUsersId=[];
var noOfUsers=0;
//mysql
var mysql     =    require('mysql');

var pool      =    mysql.createPool({
    connectionLimit : 100, 
    host     : '**********',
    user     : 'root',
    password : '******',
    database : 'users_info',
    debug    :  false
});

exports.addUsers =function(socket){

socket.on('addUser',function(data){
if(onlineUsersId.indexOf(data.userId)==-1){
onlineUsersId.push(data.userId);
data.connection=socket;
onlineUsers[noOfUsers]=data;
noOfUsers++;
//entering data into database......
pool.getConnection(function(err,connection){
       if (err) {
        connection.release();
        }  

       var post={user_id:data.userId, username: data.username};     
        connection.query("INSERT INTO online_users SET ?",post,function(err,rows){
            connection.release();
           if(err){
                connection.release();
            }        
        });           
  });
console.log(onlineUsersId);
}
});


socket.on('disconnect',function(){
var i=0;
while(onlineUsers[i]){
if(onlineUsers[i].connection.id===socket.id){
    var userId=onlineUsers[i].userId;
    var username=onlineUsers[i].username;
    //removing data from database......
pool.getConnection(function(err,connection){
        var post={user_id:userId};
         connection.query("DELETE FROM online_users WHERE user_id = "+ post.user_id,function(err,rows){
            connection.release();
        });
  });
onlineUsersId.splice(onlineUsersId.indexOf(userId),1);
delete onlineUsers[i];
noOfUsers--;
//releasing listeners
console.log(onlineUsersId);
break;
}
i++;
}
})
}

0 个答案:

没有答案