我有一个Discord机器人,今天从discord.js升级到了eris。但是,有一个问题:
当我在每个引导的分片中创建一个池(new Pool()
时(在launch()
函数中,我有大约80个分片),到PostgreSQL服务器的连接创建过多。这会导致error: sorry, too many clients already
错误,并且机器人无法执行任何操作。
当我在membercount.js中创建一个池(请参见下文),然后将其导出时,由于某种原因,内存不再可用-它增加得太多,以至于机器人崩溃。
// bot.js
const pool = require('./membercount.js').pool;
const Base = require('eris-sharder').Base;
class Class extends Base {
constructor(bot2) {
super(bot2);
}
launch() {
const bot = this.bot;
bot.pool = pool;
// ... code
}
}
// membercount.js
const config = require('./config.json'),
Sharder = require('eris-sharder'),
sharder = new Sharder.Master(config.token, '/bot.js', {
clusters: 32,
// ... config
}
});
const { Pool } = require('pg');
const pool = new Pool({
host: 'localhost',
port: 5432,
user: 'membercount',
database: 'membercount',
password: 'nope'
});
pool.connect();
module.exports.pool = pool;
sharder.on('stats', async stats => {
await pool.query("UPDATE stats SET botstats=$1 WHERE index=1", [stats]);
});
我不知道该如何处理,这样它就不会与postgres数据库建立太多的连接,否则内存不会增加太多。有没有人有办法解决吗?如果您需要更多信息,请发表评论!