今天遇到一個問題是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應設置的小一些
