【问题标题】:node.js mySQL connection via a singletonnode.js mySQL 通过单例连接
【发布时间】:2014-12-19 11:11:21
【问题描述】:

我在 node.js 中为 mySQL 连接使用单例模式,整个应用程序只有一个连接可以使用,我担心的是单例是否有这个连接的超时设置。

这种连接应该贯穿应用的整个生命周期。我搜索并找到了一些使用池的持久性示例,但不确定这是否适用于此示例,没有连接池,组件之间只有一个连接可以共享,问题是,是否有一些超时设置会终止连接长期持有?

puremvc.define(
{
name: "common.model.connections.App",

constructor: function() { 
    var mysql = require("mysql");
    this.connection = mysql.createConnection({
        host: common.Config.mySQLHost,
        user: common.Config.mySQLUsername,
        password: common.Config.mySQLPassword,
        database: common.Config.mySQLDatabase
    });

    this.connection.connect();
 }
    },
{
}, 
{
NAME: "App",
instance: null,
connection: null,

getInstance: function() {
    if(common.model.connections.App.instance == null) {
        common.model.connections.App.instance = new common.model.connections.Fico();
    }
    return common.model.connections.App.instance;
},

getConnection: function() {
    return common.model.connections.App.getInstance().connection;
}
}
);

【问题讨论】:

  • 这实际上是mysql问题而不是node.js,尝试使用属性dev.mysql.com/doc/refman/5.0/en/…增加保持连接打开的时间
  • @fmodos 感谢您的评论,似乎连接的寿命有限,非活动连接为 31536000(Windows 上为 2147483)秒,有没有办法将超时设置为无限制?
  • 否,但保持与 BD 的无限打开连接不是一个好方法。
  • 检查连接是否关闭然后打开它,然后在函数getConnection中返回连接。您可以使用单例来存储连接对象实例,但这并不意味着该对象将始终打开连接。
  • getconnection 是正确的地方,我将在几个小时内与这对夫妇一起编辑我的答案......现在有点忙

标签: mysql node.js connection-pooling


【解决方案1】:

这实际上是 MySQL 的问题,而不是 Node.js。您可以使用 MySQL 的属性wait_timeout 来增加保持连接打开的时间。

查看有关此属性的更多详细信息here

以下是单例的代码示例,它将在当前连接关闭时创建一个新连接。在这种情况下,如果您始终使用 App Singleton 来获取连接,您将永远不会有超过 1 个处于活动状态的连接:

getConnection: function() {
    var app = common.model.connections.App.getInstance();
    if(!app.connection.isConnected()){
       //connect if connection is closed.
       app.connection.connect();
    }
    return app.connection;
}

【讨论】:

    猜你喜欢
    • 2018-10-26
    • 2014-09-01
    • 1970-01-01
    • 2011-11-15
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2023-01-27
    相关资源
    最近更新 更多