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應設置的小一些


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM