正在获取mysql:“;“连接太多”;尽管在NodeJs中使用createPool

正在获取mysql:“;“连接太多”;尽管在NodeJs中使用createPool,mysql,node.js,angular,promise,connection-pooling,Mysql,Node.js,Angular,Promise,Connection Pooling,我使用Observables在Angular2+应用程序中显示实时数据,后端使用使用使用MySQL数据库的NodeJs编写。因为我使用的是Observable,所以我需要数千万个MySQL连接来保持实时工作 但不可能获得如此多的联系。所以我使用了池,其中连接是从连接池创建的。但是,我没有实施它。我仍然得到错误: 错误:ER\U CON\U COUNT\U错误:连接太多“ 我如何才能关闭连接,使连接数量不超过 前端代码: 角度.分量.ts Observable.interval(10000).su

我使用Observables在Angular2+应用程序中显示实时数据,后端使用使用使用MySQL数据库的NodeJs编写。因为我使用的是Observable,所以我需要数千万个MySQL连接来保持实时工作

但不可能获得如此多的联系。所以我使用了池,其中连接是从连接池创建的。但是,我没有实施它。我仍然得到错误:

错误:ER\U CON\U COUNT\U错误:连接太多“

我如何才能关闭连接,使连接数量不超过

前端代码:

角度.分量.ts

Observable.interval(10000).subscribe(x => {

  this.viewData(Val);

  // more functions

  console.log(" Observable")
});
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();
}
NodeJS代码:

dashboard.service.js

Observable.interval(10000).subscribe(x => {

  this.viewData(Val);

  // more functions

  console.log(" Observable")
});
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();
}

您正在为每个请求创建mysql池。您应该有一个连接池

连接池自动管理与mysql服务器的连接

您需要将连接池初始化从函数中去掉

将接头拔出

const mysqlConOptions = {
    host: host,
    user: user,
    password: password,
    database: database
};
var conPool = mysql.createPool(mysqlConOptions);
在你的职能范围内

conn = await conPool.getConnection();

每次执行
viewData
时,您似乎都在创建一个新的连接池。我们的想法是为所有
viewData
和其他数据库操作使用一个连接池。允许的连接数由max_connections系统变量控制。默认值为151,以便在Apa中使用MySQL时提高性能che Web服务器。若要支持更多连接,请将max_connections设置为更大的值。mysqld实际上允许max_connections+1个客户端连接。额外的连接保留给具有超级权限的帐户使用。[@William…你能建议如何为所有viewData使用单个连接池吗?在conPool中…基本上是在池中,即使我们不结束连接。例如,conPool.close()不执行…仍然可以工作?例如,它不会给mysql-太多连接错误?