我最近正在做一个个人项目. 我试图对使用mongodb,sqlite和mysql. 分享有关mysql连接池的用法. 该项目部署在appfog中. 在项目中,我使用连接池连接到. 本地测试正常. 上线后,几次请求两个数据接口后node自动断开,总是报告503. 我不清楚,但经过今天的调查,终于解决了.
1.mysql链接正常模式
mysql的一般用法如下:
var mysql = require('mysql'),
env = {
host: 'localhost'node自动断开,
user: 'root',
密码: “ 2212”,
: “ image_marker”
};
db =mysql.createConnection(env);
db.connect();
exports.do =function (sql, callback) {
db.query(sql, callback);
}
MySQL中有一个名为wait_timeout的变量,它表示操作超时时间. 当连接在一段时间内处于非活动状态时,该连接将自动关闭. 默认情况下,此值为28800(即8小时). 关于丢失后重新链接的常用链接,请参阅此处的门户
2. 使用连接池
在输入我的错误代码之前,官方网站只提供了连接池的用法,但没有提供与请求结合的示例. 由于缺乏经验,我认为对多个请求使用连接可以节省资源. 后来发现,连接会在一段时间后自动断开连接,从而导致了问题.
pool.getConnection(function (err, connection){
exports.do =function (sql, callback){
connection.query(sql, function (){
callback.apply(connection, arguments);
connection.release();
});
}
})
我在google / baidu之后找到了使用pool的实例
我发现他的代码使用池为每个请求创建一个连接. 改进代码最终解决了一段时间后自动断开连接的问题.
正确的代码是
pool =mysql.createPool(env);
exports.do =function (sql, callback){this.getConnection(function (err, connection){
connection.query(sql, function (){
callback.apply(connection, arguments);
connection.release();
});
})
}.bind(pool)
为每个请求创建一个连接并调用connection.release();使用后直接释放资源.
参考资料
1. 在Node.js中使用mysql模块时遇到的陷阱
2.connection-pools-in-node-mysql-for-node-js
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-288390-1.html