文档章节

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
1K
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
8.1K
5
网易开源游戏服务器框架 pomelo 发布 0.6 版

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

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

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

梦想游戏人
2016/07/12
674
0
pomelo链接mysql

本文基于上一篇博文(pomelo新建一个服务类型) 需求:玩家购买物品够添加到数据库中,以保存数据 准备工作: 已安装mysql 的windows版本 在app目录下新建dao/mysql/目录,在该目录下新建2个...

梦想游戏人
2016/07/11
2.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

Mac 下 brew 使用国内的镜像源

## 阿里云## 阿里云 # 替换brew.gitcd "$(brew --repo)"git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git# 替换homebrew-core.gitcd "$(brew --repo)/Library/......

子枫Eric
33分钟前
3
0
Java 格林威治时间字符串转本地Date对象

//import org.apache.commons.lang.StringUtils; /** * * 功能描述: 格林威治时间字符串转本地时间Date * * @param: [strDate] * @return: java.ut...

SummerGao
34分钟前
5
0
二叉搜索树的第 K 个节点

利用二叉查找树中序遍历有序的特点。 private TreeNode ret;private int cnt = 0;public TreeNode KthNode(TreeNode pRoot, int k) { inOrder(pRoot, k); return ret;}...

Garphy
44分钟前
4
0
调用约定

对于常见的指令集,在指令层面没有所谓的“函数”概念,只有“子程序”概念。子程序是存储在“主程序”之外的一段指令。子程序通过call指令调用,通过ret指令返回。子程序可以使用内存、堆栈...

tommwq
今天
3
0
设计类题目

1. 订单 和 退货单之间有什么关系? 答:退货单是 用 用户提交退货 和 订单生成的 或者 订单和退货单都是一张单子,用一个状态标识 2. 在这种由源头单生成的流程中,第二张单子是怎样生成的?...

杨凯123
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部