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了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值