我正在尝试使用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++;
}
})
}