我在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;
}
}
);
答案 0 :(得分:-2)
这实际上是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;
}