Browse Source

Change mysql pool to official version

HonorLee 6 years ago
parent
commit
0201c7761d
4 changed files with 34 additions and 117 deletions
  1. 2 1
      config.js
  2. 18 27
      system/core.js
  3. 9 85
      system/lib/extra/mysql-pool.js
  4. 5 4
      system/lib/helper/mysqldb.js

+ 2 - 1
config.js

@@ -14,7 +14,8 @@ global.Config = {
         user:'root',
         password:'',
         database:'',
-        prefix:''
+        prefix:'',
+        connectionLimit:10
     },
     //Mongodb config
     mongodb_on : false,

+ 18 - 27
system/core.js

@@ -50,37 +50,28 @@ CoreLibFiles.forEach(function(filename){
 
 
 //Core Setting,just change it if necessary!
-global.Core.Setting = {
-    //Mysql connect pool setting
-    mysql_pool:{
-        name: 'NMVCPOOL',
-        maxconn: 5
-    }
-};
+global.Core.Setting = {};
 
 //If Mysql on,load Mysql Extension
 if(Config && Config.mysql_on && Config.mysql_cfg){
-    let mysqlConfig = {
-        pool:Core.Setting.mysql_pool,
-        db:Config.mysql_cfg
-    };
-    let MysqlPool  = require(Core.Path.ExtraLib + '/mysql-pool.js').instance(mysqlConfig);
-    
-    // global.MysqlPool  = require(Core.Path.ExtraLib + '/mysql-pool.js').instance(mysqlConfig);
-    // global.MysqlDB    = require(Core.Path.Helper + '/mysqldb.js');
-    let testMysqlCon = MysqlPool.getConnection(Core.Setting.mysql_pool.name);
-    testMysqlCon.query('SELECT VERSION() as version',function(err,result,fields){
-        MysqlPool.freeConnection(Core.Setting.mysql_pool.name,testMysqlCon);
-        if(err){
-            LOGGER.error('Mysql Connect error,please recheck your config');
-            LOGGER.error(err);
-        }else{
-            LOGGER.info('Mysql Connect success');
-            LOGGER.info('Mysql Version: ' + result[0]['version'] + ' | User: ' + Config.mysql_cfg.user + ' | Database: ' + Config.mysql_cfg.database);
-            global.MysqlPool = MysqlPool;
-            global.MysqlDB   = require(Core.Path.Helper + '/mysqldb.js');
+    let MysqlPool    = require(Core.Path.ExtraLib + '/mysql-pool.js').instance(Config.mysql_cfg);
+    let testMysqlCon = MysqlPool.getConnection(function(err,connection){
+        connection.release();
+        if(!err){
+            connection.query('SELECT VERSION() as version',function(err,result,fields){
+                if(err){
+                    LOGGER.error('Mysql Connect error,please recheck your config');
+                    LOGGER.error(err);
+                }else{
+                    LOGGER.info('Mysql Connect success');
+                    LOGGER.info('Mysql Version: ' + result[0]['version'] + ' | User: ' + Config.mysql_cfg.user + ' | Database: ' + Config.mysql_cfg.database);
+                    global.MysqlPool = MysqlPool;
+                    global.MysqlDB   = require(Core.Path.Helper + '/mysqldb.js');
+                }
+            });
         }
     });
+    
 }
 
 //If Mongodb on,load Mongodb Extension
@@ -110,4 +101,4 @@ for(let path in global.Core.Path){
     }catch(e){
         FILE.mkdirsSync(global.Core.Path[path]);
     }
-}
+}

+ 9 - 85
system/lib/extra/mysql-pool.js

@@ -2,93 +2,17 @@
  */
 var Mysql = require('mysql');  
 
-var pool = function(config){  
-    this.free = [];//空闲连接集合
-    this.used = 0; //已使用连接集合
-    for(var key in config.pool){this[key] = config.pool[key];}
-
-    this.newConnection = function(){
-        var con = Mysql.createConnection(config.db);
-        con.on('error', function(err) {
-            if(err.code === 'PROTOCOL_CONNECTION_LOST') {
-                console.log('Connection reconnect!')
-                con = Mysql.createConnection(config.db)
-            }else{
-                console.log('MYSQL on error:')
-                console.log(err);
-            }
+var pool;
+var client = {
+    getConnection:function(callback){
+        if(!pool) throw new Error("Mysql pool not created!");
+        if(!callback || typeof(callback)!='function') throw new Error("Mysql pool get connection lost callback!");
+        pool.getConnection(function(err,connection){
+            callback(err,connection);
         });
-        return con;
-    };
-    this.getConnection = function(){
-        var con = null;
-        if(this.used < this.maxconn){
-            if(this.free.length > 0){
-                con = this.free.shift();
-            }else{
-                con = this.newConnection();
-            }
-            this.used++;
-            // console.log('当前使用连接: ' + this.used + ' 空闲连接: ' + this.free.length);
-        }
-        return con;
-    };
-    this.freeConnection = function(con){
-        this.free.push(con);
-        this.used--;
-    };
-    this.freeAll = function(){
-        this.used = 0;
-        for(var i = 0; i < this.free.length; i++){
-            this.free[i].end();
-        }
-        this.free = [];
-    };
-};
-var client = {  
-    pools: [],
-    /**
-     * 得到一个数据库连接
-     * @param name 数据库pool名字name
-     * @return {*}
-     */
-    getConnection: function(name){
-        var pool = this.pools[name];
-        return pool ? pool.getConnection() : null;
-    },
-    /**
-     * 释放一个数据库连接
-     * @param name 数据库pool名字name
-     * @param con 连接
-     */
-    freeConnection: function(name,con){
-        var pool = this.pools[name];
-        if(pool){
-            pool.freeConnection(con);
-        }
-    },
-    /**
-     * 释放一个数据库所有连接
-     * @param name 数据库pool名字name
-     */
-    freePool: function(name){
-        var pool = this.pools[name];
-        if(pool)
-            pool.freeAll();
-    },
-    /**
-     * 释放所有数据库的所有连接
-     */
-    freeAll: function(){
-        for(var key in this.pools)
-            this.pools[key].freeAll();
     }
-};
+}
 exports.instance = function(config){
-    // if(client.pools.length < 1){
-        // for(var i = 0; i < config.length; i++){
-            client.pools[config.pool.name] = new pool(config);
-        // }
-    // }
+    pool = Mysql.createPool(config)
     return client;
 };

+ 5 - 4
system/lib/helper/mysqldb.js

@@ -1,10 +1,11 @@
 'use strict'
 module.exports={
     query:function(query,callback){
-        let mysql = MysqlPool.getConnection(Core.Setting.mysql_pool.name);
-        mysql.query(query,function(err, results, fields) {  
-            MysqlPool.freeConnection(Core.Setting.mysql_pool.name,mysql);
-            callback(err,results,fields);
+        MysqlPool.getConnection(function(err,con){
+            con.query(query,function(err, results, fields) {  
+                con.release();
+                if(callback && typeof(callback)=='function') callback(err,results,fields);
+            });
         });
     }
 };