文档章节

pomelo链接mysql

梦想游戏人
 梦想游戏人
发布于 2016/07/11 11:18
字数 527
阅读 2078
收藏 3

本文基于上一篇博文pomelo新建一个服务类型

需求:玩家购买物品够添加到数据库中,以保存数据

准备工作:

已安装mysql 的windows版本

先安装依赖库
npm install mysql
npm install generic-pool

在app目录下新建dao/mysql/目录,在该目录下新建2个文件

新建文件dao-pool.js
var _poolModule = require('generic-pool');

/*
 * Create mysql connection pool.
 */
var createMysqlPool = function(app) {
	var mysqlConfig = app.get('mysql');
	return _poolModule.Pool({
		name: 'mysql',
		create: function(callback) {
			var mysql = require('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
	});
};

exports.createMysqlPool = createMysqlPool;




新建文件mysql.js
// mysql CRUD
var sqlclient = module.exports;

var _pool;

var NND = {};

/*
 * Init sql connection pool
 * @param {Object} app The app for the server.
 */
NND.init = function(app){
	_pool = require('./dao-pool').createMysqlPool(app);
};

/**
 * Excute sql statement
 * @param {String} sql Statement The sql need to excute.
 * @param {Object} args The args for the sql.
 * @param {fuction} cb Callback function.
 * 
 */
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);
			cb(err, res);
		});
	});
};

/**
 * Close connection pool.
 */
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;
		return sqlclient;
	}
};

/**
 * shutdown database
 */
sqlclient.shutdown = function(app) {
	NND.shutdown(app);
};


新建配置文件 

新建文件mysql.json
{
	"development": {
	  "host" : "127.0.0.1",
		"port" : "3306",
		"database" : "pomelo",
		"user" : "root",
		"password" : ""
	},

	"production": {
	  "host" : "127.0.0.1",
		"port" : "3306",
		"database" : "pomelo",
		"user" : "root",
		"password" : ""
	}
}

准备工作完毕。/******************************************************************************/////

 

app.js添加以下代码

app.loadConfig("mysql", app.getBase() + "/config/mysql.json"); // 添加配置
app.configure('production|development', "game", function () {
    var dbclient = require("./app/dao/mysql/mysql.js").init(app); // 初始化dbclient
    app.set("dbclient", dbclient);// dbclient 为外部数据库接口,app,get("dbclient") 来使用
})


修改gameHandler.js的购买接口  buyGoods  函数


handler.buyGoods=function(msg,session,next){
	var id=msg.id;
    var count = msg.count;
    
    ///////////////////////////////

	console.log("购买物品玩家 uid:" + session.uid);

    if (id == "100" && count == 1) {//验证购买条件
        
        //允许购买
        var sql = " insert into `goods` (`id`, `owner`) VALUES(?, ?)";
        
        var args = [id, session.uid];
        var dbclient = pomelo.app.get('dbclient');//获取全局mysql client

        console.log(dbclient);
        dbclient.query(sql, args, function (err, res) {//执行sql语句 函数insert和query等效
              
            console.log("......................");
            console.log(err + "            " + JSON.stringify(res));
            
            
            console.log("......................");
            if (err) { // 数据库操作失败
                next(null, { msg: "购买失败,服务器错误!", code: 200 });

            }
            else {//购买成功
                next(null, { msg: "购买物品:#活血丹 成功", code: 200 });

            }
        }
    
        );

	}else{ // 不允许购买
				next(null,{msg:"你的金币不足,购买失败",code:200});
	}
}

运行测试,查看数据库

服务端日志:

© 著作权归作者所有

梦想游戏人
粉丝 38
博文 445
码字总数 127977
作品 0
成都
私信 提问
pomelo连接redis

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

梦想游戏人
2016/07/12
280
0
农码一生/Hi-Blogs

Hi-Blogs 嗨博客,基于ASP.NET Core2.0的跨平台的免费开源博客系统 演示地址:https://haojima.net/ 意见和建议:https://github.com/zhaopeiym/Hi-Blogs/issues 使用到的相关平台、技术和工...

农码一生
2015/09/24
0
0
pomelo------监控安装

根据http://douya.blog.51cto.com/6173221/1408813 这篇博文 安装号~pomelo,chatofpomelo.pomelo-admin-web 后,打开admin-module模块 $ git checkout tutorial-admin-module npm install 然......

技术小胖子
2017/11/16
0
0
pomelo解耦代码组织

本文demo给予 上一片博文(pomelo链接mysql) 暴露给客户端的servers 逻辑部分解耦到service服务,达到解耦的目的 需求:吧购买物品解耦到service目录 添加持久对象: this.GoodsService 修改...

梦想游戏人
2016/07/11
78
0
windows安装 lord of pomelo

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

ln_bo
2012/12/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL在高并发下的订单撮合、系统使用、共享锁与排他锁保证数据一致性

前序 距离上次择文发表,两月余久。2018年也即将要结束了,目前的工作依然是与区块链应用相关的,也很荣幸在9月初受邀签约出版暂名为《区块链以太坊DApp实战开发》一书,预计在明年年初出版。...

我最喜欢三大框架
13分钟前
0
0
深入理解Flutter多线程

该文章属于<简书 — 刘小壮>原创,转载请注明: <简书 — 刘小壮> https://www.jianshu.com/p/54da18ed1a9e Flutter默认是单线程任务处理的,如果不开启新的线程,任务默认在主线程中处理。 ...

刘小壮
18分钟前
0
0
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

//有点投机啦 import java.util.ArrayList; public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList <Integer> s=new ArrayLi......

南桥北木
23分钟前
0
0
聊聊elasticsearch的SeedHostsResolver

序 本文主要研究一下elasticsearch的SeedHostsResolver ConfiguredHostsResolver elasticsearch-7.0.0/server/src/main/java/org/elasticsearch/discovery/PeerFinder.java public inter......

go4it
29分钟前
0
0
Python黑客攻击的几种技术,你得了解一下

前言 Python提供了丰富的模块,几乎可以直接用于任何黑客领域。对于黑客模块没有提供的区域,可以使用c类型调用操作系统提供的本机API。简而言之,Python可以用于攻击几乎任何领域,如应用程...

A_裙232550246
29分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部