Open liketo opened 11 years ago
看后真的受益匪浅,我有个疑问就是为什么demo游戏不用mongodb数据库呢?
数据库可以自己换呀,用什么都可以
一使用就会报错 pomelo-rpc - [mqtt-acceptor] process rpc message error ReferenceError: id is not defined 在dbclient.query(sql, args, function (err, res)之后 这是什么原因呢 断点看到dbclient执行过初始化操作
声明:本人纯服务器开发新手菜鸟,分析的不一定正确,分析的也没啥技术含量,主要是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');
app.configure('production|development', 'chat', function () { var dbclient = require('./app/dao/mysql/mysql').init(app); app.set('dbclient', dbclient);//这个dbclient就是访问数据库的接口 });
网上找文档时发现这样一段描述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 }); };
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; } };
/**
chatDao.addChatHistorySql = function(playerName,txt ,cb) { var sql = 'insert into chatList (playerName, txt) values ( ?, ?)'; var args = [playerName, txt];
}; 弄完这个就该去看Sync了。