From d8dfd4dd67420687cce41d0ee18188ed299df6bb Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 13 Jul 2023 14:01:39 +0800 Subject: [PATCH] 1 --- server/common/dbpool.js | 47 +++++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/server/common/dbpool.js b/server/common/dbpool.js index 6788b7f..b0cfd15 100644 --- a/server/common/dbpool.js +++ b/server/common/dbpool.js @@ -1,7 +1,6 @@ const constant = require('./constant'); -const dbHash = { -}; +const dbHash = {}; [ constant.GAMEDB_NAME, @@ -9,24 +8,50 @@ const dbHash = { constant.BCNFTDB_NAME ].forEach( (item) => { - dbHash[item] = {}; + dbHash[item] = { + 'lockTimes': 0, + 'conn': null + }; } ); -async function internalCreateConn(name) { - +async function internalCreateConn(app, name) { + if (!dbHash.hasOwnProperty(name)) { + throw new Error('dbpool error dbname:' + name); + } + const dbObj = dbHash[name]; + while (dbObj.lockTimes > 0) { + await new Promise(function (resolve, reject) { + setTimeout(function () { + resolve(); + }, 1000); + }); + } + if (!dbObj.conn) { + ++dbObj.lockTimes; + try { + const {err, conn} = await app.getDbConn(name); + if (err) { + throw new Error('getGBcEventConn error:' + err); + } + dbObj.conn = conn; + } finally { + --dbObj.lockTimes; + } + } + return dbObj.conn; } -async function getBcEventConn() { - return await internalCreateConn(constant.BCEVENTDB_NAME); +async function getBcEventConn(app) { + return await internalCreateConn(app, constant.BCEVENTDB_NAME); } -async function getBcNftConn() { - return await internalCreateConn(constant.BCNFTDB_NAME); +async function getBcNftConn(app) { + return await internalCreateConn(app, constant.BCNFTDB_NAME); } -async function getGameConn() { - return await internalCreateConn(constant.GAMEDB_NAME); +async function getGameConn(app) { + return await internalCreateConn(app, constant.GAMEDB_NAME); } exports.getBcEventConn = getBcEventConn;