- 36
- 0
项目背景:一个实时展现来自多个数据库的看板。
由于需要实时,所以我这边目前采用的是setInerval,间隔10s比对一遍数据,如果2个数据不一致,就表示有新增,然后通过websocket通知到前端,进行页面渲染。
刚开始运行是比较正常的,过个几分钟就出错,原因是mysql连接数过多,看了下大概能有200多个sleep的链接。
我使用的是连接池的写法,在代码中已经进行回收,不知道为啥就是回收不回去。开始用的是 connection.release();,发现完全不起作用,换成了destroy,稍有好转,仍有该问题。
修改数据库配置,增大连接数和修改 wait_timeout 都已经尝试过,并不适合。
var mysql = require('mysql');
class mysql_db{
constructor(site){
this.site = site
}
connect(){
return mysql.createPool({
connectionLimit: 10,
host: BASIC_CONFIG[process.env.NODE_ENV][this.site].conn.host,
user: BASIC_CONFIG[process.env.NODE_ENV][this.site].conn.user,
password: BASIC_CONFIG[process.env.NODE_ENV][this.site].conn.password,
database: BASIC_CONFIG[process.env.NODE_ENV][this.site].conn.database,
multipleStatements: true //设置为true可执行多条SQL语句
});
};
async await_query(sql,values){
var _this = this;
return new Promise((resolve, reject) => {
this.connect().getConnection(function (err, connection) {
if (err) {
reject(err)
} else {
connection.query(sql, values, (err, rows) => {
if (err) {
console.log(_this.site+ '---错误');
reject(err);
connection.destroy();
} else {
console.log(_this.site+ '---正确');
resolve(rows);
connection.destroy();
}
})
// connection.end(function(err){
// console.log('end a connection');
// });
}
})
})
}
}
module.exports = mysql_db;
以上为项目背景,可能有人会说为啥不在新增数据时进行触发,说明下,因为连接了多个数据库,其他数据库我并只有读取的权利,所以只能采用后端轮询的方式,去监控。(我能想到的就是这个方法)
我的问题是:
1、是否有其他方式进行纯后端检测数据表的变化?
2、msyql模块的回收为啥不起作用?是因为我代码写的有问题吗?
3、我的mysql类,在多个文件中被引入(require),是否是这个原因导致回收不起作用?
谢谢
- 共 0 条
- 全部回答
-
时间枯萎 普通会员 1楼
"Too many connections" 是一个常见的错误,它表示你尝试连接到数据库的数量超过了允许的最大连接数。这通常是由于你正在尝试连接到一个已经处于繁忙模式的数据库服务器。
解决这个问题的一种方法是限制你正在尝试连接到数据库的数量。你可以在你的应用程序代码中设置一个最大连接数,当这个数达到时,程序将自动断开连接并重新连接。
例如,你可以在你的 Node.js 代码中使用
concurrent模块来限制并发连接数:```javascript const concurrently = require('concurrent');
concurrentlyumber({ limit: 5 }, (err, results) => { if (err) { console.error(err); return; }
results.forEach(result => { console.log(result); }); }); ```
在这个例子中,我们设置了一个最大连接数为 5。当这个数达到时,程序将自动断开连接并重新连接。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

