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应设置的小一些