Error: Connection lost: The server closed the connection
今天遇到一个问题是shopnc的im没更新已读的消息
在本地别人的机器上没问题,可以修改消息状态,而我机器上不行
输出错误
Error: Connection lost: The server closed the connection.
show global variables like '%timeout%';
发现我的wait_timeout 设置的100
而别人的机器是28800
wait_timeout的变量,表示操作超时时间,当连接超过一定时间没有活动后,会自动关闭该连接,这个值默认为28800(即8小时)
1.普通链接
db = mysql.createConnection(db_config.config);
function handleDisconnect() {
db = mysql.createConnection(db_config.config);
db.on('error', function(err) {
if (!err.fatal) {
return;
}
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
handleDisconnect();
}else{
console.log('mysql error: ' + err.code);
throw err;
}
});
db.connect(function(err) {
if (err){
console.log('error when connecting to db:', err);
setTimeout(handleDisconnect , 2000);
}
console.log(' mysql connected');
});
}
handleDisconnect();
2.连接池
var pool = mysql.createPool(db_config.config);
pool.getConnection(function(err, connection) {
if(err){
console.log(' mysql-pool connected fail.');
console.error(' ' + (err.stack || err));
} else {
console.log(' mysql-pool connected success.');
}
});
var query=function(sql,callback){
pool.getConnection(function(err,conn){
if(err){
console.log(' mysql-pool connected fail.');
console.error(' ' + (err.stack || err));
callback(err,null);
}else{
conn.query(sql,function(qerr,vals){
conn.release();
callback(qerr,vals);
});
}
});
};
为每一个请求都建立一个connection使用完后调用connection.release(); 直接释放资源
为了提高数据库的IO速度,会使用连接池做处理,但是在高并发的情况下,一条连接完成任务后不释放掉, 会导致链接池满负载 ,后面的请求将无法处理,程序就会出现阻塞
mysql的wait_timeout应设置的小一些

浙公网安备 33010602011771号