我使用可观测数据在Angular2+应用程序中显示实时数据,后端是用使用MySQL数据库的NodeJs编写的。由于我使用的是可观测数据,我需要数以千万计的MySQL连接来保持实时工作。
但我们不可能获得如此多的联系。因此,我使用了池,其中连接是从连接池创建的。然而,我没有执行它。我仍然会发现错误:
错误: ER_CON_COUNT_ERROR:太多连接“
如何关闭连接,使连接的数量不超过这些连接?
前端代码:
angular.component.ts
Observable.interval(10000).subscribe(x => {
this.viewData(Val);
// more functions
console.log(" Observable")
});NodeJS代码:
dashboard.service.js
function viewData(data) {
var sqlQuery = `
select * from TRANSACTION_PAYLOAD where INTERFACE_NAME = 'Highmark' AND (STATUS ='SUCCESS_RESPONSE')`
var deferred = Q.defer();
console.log("INSIDE NODE JS SERVICE");
var host = config.host;
var user = config.user;
var password = config.password;
var database = config.database;
var con = mysql.createPool({
host: host,
user: user,
password: password,
database: database
});
con.getConnection(function (err) {
console.log("Inside .getConnection ")
if (err) deferred.reject(err.name + ': ' + err.message);
con.query(sqlQuery,
function (err, result, fields) {
if (err) deferred.reject(err.name + ': ' + err.message);
console.log(result);
deferred.resolve(result);
});
});
return deferred.promise;
con.close();
}发布于 2018-12-20 06:44:39
您正在为每个请求创建mysql池。你应该有一个连接池。
连接池自动管理到mysql服务器的连接。
您需要从函数中取出连接池初始化。
把连接拉出来
const mysqlConOptions = {
host: host,
user: user,
password: password,
database: database
};
var conPool = mysql.createPool(mysqlConOptions);在你的职责范围内,
conn = await conPool.getConnection();https://stackoverflow.com/questions/53863521
复制相似问题