Node.js модуль MySQL, автоматическое переподключение БД при закрытии соединения - PullRequest
0 голосов
/ 12 октября 2018

Я использовал этот MySQL-модуль Node.js для работы с БД.Мое соединение помещается в отдельный файл в виде модуля.Вот код

let mysql = function connect(){
    return require('mysql').createConnection({
        hostname: 'localhost',
        user: 'root',
        password: 'root',
        database: 'chat_db'
    });
}
module.exports.connect = mysql;

Я хочу немного его изменить, чтобы при любом отключении оно автоматически переподключалось

1 Ответ

0 голосов
/ 14 октября 2018

Вы можете написать код переподключения самостоятельно, но на это уйдет время, и я не думаю, что это будет легко.Я бы порекомендовал использовать пул соединений, чтобы несколько соединений с MySQL было открыто, и использовать их при необходимости.Это позволит вам периодически проверять, живо ли соединение, и уничтожать / восстанавливать соединение, если это не так.Управлять пулом намного проще, чем управлять одним очень важным соединением.

Похоже, что в используемой вами библиотеке есть пул соединений:

Вместо создания и управлениясоединения один за другим, этот модуль также обеспечивает встроенный пул соединений с использованием mysql.createPool (config)

https://github.com/mysqljs/mysql#pooling-connections

Еще одна опция для пула, которая у меня была успешнойс is generic-pool .Настройка с generic-pool может выглядеть так:

const pool = require('generic-pool');
const mysql = require('mysql');

const connections = pool.createPool({
  create: (done) => {
    return mysql.createConnection({
      hostname: 'localhost',
      user: 'root',
      password: 'root',
      database: 'chat_db'
    }).connect(done);
  },
  destroy: connection => connection.destroy(),
  validate: connection => connection.threadId,
}, {
  testOnBorrow: true,
  acquireTimeoutMillis: 10000,
  min: 1,
  max: size,
});
...