文档章节

pomelo中使用mysql

piggybear
 piggybear
发布于 2015/02/16 10:28
字数 861
阅读 29
收藏 0

声明:本人纯服务器开发新手菜鸟,分析的不一定正确,分析的也没啥技术含量,主要是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
});
};

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

本文转载自:http://blog.csdn.net/aa294194253/article/details/41330175

共有 人打赏支持
piggybear
粉丝 3
博文 237
码字总数 37552
作品 0
西安
技术主管
私信 提问
windows安装 lord of pomelo

首先要知道什么是pomelo? Pomelo是基于node.js的高性能、分布式游戏服务器框架,通过一些简单的命令,就可以实现强大的功能,帮助你避免游戏开发中枯燥的重复劳动和底层逻辑。目前pomelo(>=...

ln_bo
2012/12/31
0
0
网易开源游戏服务器框架 pomelo 0.9 版发布

pomelo 0.9版于2月26日发布,以下是该版本的新特性。 ## pomelo rpc支持zeromq通信 在pomelo 0.9中提供了基于zmq的rpc调用,开发者可以根据需要选择原有的pomelo-rpc或者pomelo-rpc-zeromq。...

谢骋超
2014/02/27
8K
5
网易开源游戏服务器框架 pomelo 发布 0.6 版

pomelo 0.6是一次很大的升级, 是自0.3版以来最重要的一次升级 在Pomelo 0.6版本中,对pomelo部分结构进行了调整,将原有的globalChannel组件和master高可用组件从框架中移出,以一种插件的形...

谢骋超
2013/08/26
6.5K
7
pomelo连接redis

本文基于上一篇博文(pomelo链接mysql) 现在吧数据库改为redis,先安装npm install redis 1.app.js添加代码 2.GoodsService.js 添加代码...

梦想游戏人
2016/07/12
280
0
网易正式发布 Pomelo 开源游戏服务端框架

10月20日的开源中国 杭州源创会 上,来自网易的 @谢骋超为大家介绍了网易即将开源的基于 Node.js 的游戏服务器框架 Pomelo (柚子),并称该框架将于11月正式开源。 今天这个框架终于正式跟我们...

oschina
2012/11/21
28.9K
97

没有更多内容

加载失败,请刷新页面

加载更多

什么是以太坊DAO?(二)

Decentralized Autonomous Organization,简称DAO,以太坊中重要的概念。一般翻译为去中心化的自治组织。 在上一节中,我们为了展示什么是DAO创建了一个合约,就像一个采用邀请制的俱乐部,会...

geek12345
21分钟前
1
0
全屋WiFi彻底无死角 这才是终极解决方案

无线网络现在不仅在家庭中不可或缺,在酒店、医院、学校等场景中的需求也越来越多。尤其是这些场景中,房间多但也需要每个房间都能够完美覆盖WiFi,传统的吸顶式AP就无法很好的解决问题。 H3...

linux-tao
35分钟前
3
0
Python日期字符串比较

需要用python的脚本来快速检测一个文件内的二个时间日期字符串的大小,其实实现很简单,首先一些基础的日期格式化知识如下 复制代码 %a星期的简写。如 星期三为Web %A星期的全写。如 星期三为...

dragon_tech
35分钟前
3
0
ORA 各种oraclesql错误

ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某...

青峰Jun19er
39分钟前
3
0
没错,老板让我写个 BUG!

前言 标题没有看错,真的是让我写个 bug! 刚接到这个需求时我内心没有丝毫波澜,甚至还有点激动。这可是我特长啊;终于可以光明正大的写 bug 了🙄。 先来看看具体是要干啥吧,其实主要就是...

crossoverJie
52分钟前
96
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部