pomelo 连接mysql_pomelo中使用mysql

声明:本人纯服务器开发新手菜鸟,分析的不一定正确,分析的也没啥技术含量,主要是mysql的使用比较分散,集中到一起给新手看着省事,也可能会误导大家,自己小心点。

准备工作:

1.先创建mysql.json配置文件,里面放数据库名子 帐号密码端口。

2.用mysql命令行创建个跟配置文件中名字相同的数据库,然后创建个表,启动数据库。

3.npm install mysql,npm install generic-pool;

代码:

1.在app.js中加载mysql.json配置文件

app.loadConfig('mysql', app.getBase() + '/config/mysql.json');

2.在app.js中为每个需要访问数据库的server创建dbclient,dbclient就是与数据库的一个客户端

app.configure('production|development', 'chat', function ()

{

var dbclient = require('./app/dao/mysql/mysql').init(app);

app.set('dbclient', dbclient);//这个dbclient就是访问数据库的接口

});

3. dao-pool.js 这个主要是创建连接池,作用是提高访问效率的,比如一个进程需要个长时间读取数据库动作,如果没有这个池,只能等完成,有了这个池子就可以再建立个连接,这个池子就是管理这些连接的管理器。这分析完全不知道靠不靠谱。

网上找文档时发现这样一段描述generc-pool缺陷的话******:

“generc-pool小巧精悍,总共只有几百行,完全由js代码写成。使用的方法页很简单。但是有一点不足的地方是,实例A和实例B建立链接,初始化连接池poolAB之后,如果实例A在守护进程的作用下进行了重启,此时poolAB中的所有连接都会失效,但是generic-pool本身只对超时的连接进行了处理,对于这种虽然没有超时但是已经失效的连接并没有相应操作。这个缺陷为我的工作带来了极大困扰。我对该模块进行了小小的改动,实现了对失效链接的处理。

”, 不知道需要处理下不?

原文链接:http://blog.csdn.net/zenghuaidong/article/details/7428808

var createMysqlPool = function(app) {

var mysqlConfig = app.get('mysql'); //获取mysql配置信息

return _poolModule.Pool({

name: 'mysql',//pool的名字

create: function(callback) {

var mysql = require('mysql');//加载mysql 模块

var client = mysql.createConnection({

host: mysqlConfig.host,

user: mysqlConfig.user,

password: mysqlConfig.password,

database: mysqlConfig.database

});

callback(null, client);

},

destroy: function(client) {

client.end();

},

max: 10, //池子的最大连接接容量

idleTimeoutMillis : 30000,一个连接超过这个值就断开。

log : false

});

};

mysql.js 这个文件是给应用使用的数据库接口 var NND = {}; //实在没看懂NND什么意思,娘娘的。难道真是“娘娘的”? NND.init = function(app){ _pool = require('./dao-pool').createMysqlPool(app); };

NND.query = function(sql, args, cb){

_pool.acquire(function(err, client) {

if (!!err) {

console.error('[sqlqueryErr] '+err.stack);

return;

}

client.query(sql, args, function(err, res) {

_pool.release(client);//这里要注意下,释放这个client,估计上边的idleTimeoutMillis ,就是在这之后开始统计,如果没有访问数据库操作,这就这个app与数据库的链接断开

cb(err, res);

});

});

};

NND.shutdown = function(){

_pool.destroyAllNow();

};

/**

init database

*/

sqlclient.init = function(app) {

if (!!_pool){

return sqlclient;

} else {

NND.init(app);

sqlclient.insert = NND.query;

sqlclient.update = NND.query;

sqlclient.delete = NND.query;

sqlclient.query = NND.query;

console.log("init Ok");

return sqlclient;

}

};

/**

shutdown database */ sqlclient.shutdown = function(app) { NND.shutdown(app); }; 5.然后就可以在chat server中使用sql语句与dbclient访问数据库了

chatDao.addChatHistorySql = function(playerName,txt ,cb) {

var sql = 'insert into chatList (playerName, txt) values ( ?, ?)';

var args = [playerName, txt];

var dbclient = pomelo.app.get('dbclient');

console.log(dbclient);

dbclient.insert(sql, args, function(err, res) {

if (err) {

logger.error('create chatList for chatDao failed! ' + err.stack);

//utils.invokeCallback(cb, err, null);

} else {

console.log("sql save Ok!");

//var bag = new Bag({id: res.insertId});

//utils.invokeCallback(cb, null, bag);

}

});

};

弄完这个就该去看Sync了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值