【发布时间】:2019-05-20 16:06:05
【问题描述】:
我正在使用 Observables 在 Angular2+ 应用程序中显示实时数据,后端是用使用 MySQL 数据库的 NodeJs 编写的。由于我使用的是 Observables,我需要数以千万计的 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();
}
【问题讨论】:
-
每次执行
viewData时,您似乎都在创建一个新池。这个想法是为所有viewData和其他数据库操作使用单个连接池。 -
允许的连接数由 max_connections 系统变量控制。当 MySQL 与 Apache Web 服务器一起使用时,默认值为 151 以提高性能。要支持更多连接,请将 max_connections 设置为更大的值。 mysqld 实际上允许 max_connections + 1 个客户端连接。额外的连接保留给拥有 SUPER 权限的帐户使用。 [dev.mysql.com/doc/refman/5.5/en/too-many-connections.html]
-
@William ...您能否建议如何为所有 viewData 使用单个连接池?
标签: mysql node.js angular promise connection-pooling