0
起初我認爲它與垃圾收集有關,但是進一步調查問題,似乎mysql不再響應我的任何查詢。node.js mysql-simple-pool在12小時之後停止響應
我的每個模型都有一個require('./db.js');在他們的文件的頂部,它看起來像:
var Pool = require('mysql-simple-pool');
var mysql_pool = new Pool(50, {
host: process.env.IP || '127.0.0.1', //currently the db is on the server
user: 'USERNAME',
password: 'PASSWORD',
database: 'DATABASE'
});
module.exports = mysql_pool;
偉大的作品,我可以做這樣的事情:
db.query('select * from user where username = ? and password = ?', [username, hashed_password], function(err, rows) {
if (err) {
console.log("error in loginUser", err);
return callback(err, null);
} else {
if (rows[0]) {
var user = new User(rows[0]);
return callback(err, user);
} else {
return callback(err, null);
}
}
});
除每12個小時左右就停止接聽。當人們嘗試登錄時,它只是坐在那裏,我最終得到超時錯誤。
如果用戶已經登錄,那麼來自內存的所有內容都很棒,但是我查詢數據庫的部分從未做出響應。
更新: 我在代碼中發現了一點點,我只是想着想這應該是什麼。
connection.on('error', function(err) {
// Check if the connection has been lost.
if (err.fatal && err.code !== 'PROTOCOL_CONNECTION_LOST') {
// Decrement the current number of _connections.
pool._currentNumberOfConnections--;
}
});
由於某種原因,當協議連接丟失時它沒有做任何事情。我想知道是否有一種方法可以在連接丟失或重建時重新建立連接?我假設問題在於連接打嗝,並且由於我正在使用游泳池,所以他們基本都會迷路或卡住,而他們只是坐在那裏。
爲什麼不分享所有的模塊之間的連接?你認爲你正在完成你所有的連接是否可行? –
不知道我得到了你所問的,這確實在我所有的模塊之間共享同一個池,因爲它將相同的變量導出到所有模塊。 – silkcom
mysql-simple-pool不活動且缺少測試。我認爲你可以對它進行壓力測試或切換到其他模塊。 – damphat