Я в настоящее время разрабатываю Discord Bot, для хранения данных я использую MySQL, но через несколько часов соединение умирает. Мне было интересно, есть ли у кого-то ключ к тому, как это сделать. Это способ, которым я в настоящее время подключаюсь:
// Initalise Variables
var config;
var mysql, conn;
var fs;
try {
// External Packages
fs = require('fs');
config = require('./config.json');
mysql = require('mysql');
// Connection Setup
conn = mysql.createConnection({
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password,
database: config.mysql.database
});
conn.connect();
} catch (e) {
console.error(e);
}
Я думаю, вам нужно установить навсегда и снова запустить службу. Forever - это простой инструмент CLI для обеспечения непрерывного выполнения данного сценария. Как только вы установите навсегда и запустите файл js узла, он будет поддерживать постоянный файл. Использование npm вы можете установить навсегда
npm install forever -g
Затем просто перезапустите js файл
Пример:
forever start app.js
Надежда теперь js служит постоянно, не нарушая соединение.
Вы можете попробовать изменить настройку тайм-аута иначе, если по умолчанию будет 10000 мс или 10 секунд.
try {
// External Packages
fs = require('fs');
config = require('./config.json');
mysql = require('mysql');
// Connection Setup
conn = mysql.createConnection({
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password,
database: config.mysql.database,
connectTimeout: config.mysql.timeout //1000000 some large number
});
conn.connect();
} catch (e) {
console.error(e);
}
Вероятно, вы должны использовать пул соединений вместо одного соединения с БД (это, похоже, не всегда сохраняет тип настройки, и вам придется дать большой тайм-аут, как указано выше)
try {
// External Packages
fs = require('fs');
config = require('./config.json');
mysql = require('mysql');
// Connection Setup
conn = mysql.createConnection({
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password,
database: config.mysql.database,
connectionLimit: 10,
queueLimit: 20
});
var pool = mysql.createPool(config);
var queryDB = function(qry, cb) {
pool.getConnection(function(error, connection) {
if(error) {
cb(error, null);
}
else {
connection.query(qry, function (e, rows) {
connection.destroy();
cb(e, rows);
});
}
});