diff --git a/js_pm2.config.js b/js_pm2.config.js index af663c6..0efa009 100644 --- a/js_pm2.config.js +++ b/js_pm2.config.js @@ -29,6 +29,25 @@ if (env.SERVER_ID) { //读取服务配置 const config = fs.existsSync(path.resolve(__dirname, 'config.json')) ? JSON.parse(fs.readFileSync(path.resolve(__dirname, 'config.json'), 'utf-8')) : {}; const dis = config.serverId != undefined ? config.serverId : '0'; + + +let instancesNum = 8; +if(config.openTime){ + let openDate = new Date(config.openTime); + //计算openTime距离今天的天数 + let today = new Date(); + // 获取两个日期之间的毫秒差 + let timeDiff = today.getTime() - openDate.getTime(); + // 将毫秒差转换为天数 + let daysDiff = Math.floor(timeDiff / (1000 * 3600 * 24)); + console.log(`已开服天数:${daysDiff}`); + + //如果开服超过3天的区,则只开区2个进程 + if(daysDiff > 3){ + instancesNum = 2; + } +} + const localApps = [ { // 应用程序名称 @@ -38,7 +57,7 @@ const localApps = [ // 应用程序所在的目录 cwd: './', //集群实例数量,0表示根据cpu核心数自动控制 - instances: 8, + instances: instancesNum, // 传递给脚本的参数 args: '-serverType msg', // 是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。 diff --git a/src/gameLog.ts b/src/gameLog.ts index ef10a87..04e8c09 100644 --- a/src/gameLog.ts +++ b/src/gameLog.ts @@ -9,7 +9,7 @@ async function connGameLogDB() { }else{ logDBUrl = "mongodb://root:lyMaple525458@10.0.1.20:27017/heijiao_gamelog?authSource=admin"; } - let client = await MongoClient.connect(logDBUrl); + let client = await MongoClient.connect(logDBUrl,{maxPoolSize:10}); logDB = client.db(`gameLog${G.config.serverId}`); return logDB; } diff --git a/src/setMongodb.ts b/src/setMongodb.ts index c73abc3..8ab7e8b 100644 --- a/src/setMongodb.ts +++ b/src/setMongodb.ts @@ -5,6 +5,7 @@ import { IndexDescription, IndexSpecification, MongoClient, + MongoClientOptions, ObjectId, OptionalId } from 'mongodb'; @@ -16,6 +17,7 @@ import {MongodbCollections} from './module/mongodb'; import {HuoDongFun} from './public/huodongfun'; import {zbsGroup} from './api_s2c/hbzb/zbs/fun'; import {clusterRunOnce} from './clusterUtils'; +import { PublicShared } from './shared/public/public'; const indexs: Partial<{ [k in keyof MongodbCollections]: IndexDescription[] }> = { item: [ @@ -349,9 +351,37 @@ const indexs: Partial<{ [k in keyof MongodbCollections]: IndexDescription[] }> = }; const crossIndexs: Partial<{ [k in keyof MongodbCollections]: IndexDescription[] }> = { + email: [ + { + key: {sid: 1} + }, + { + key: {uid: 1} + } + ], + fightLog: [ + { + key: {uid: 1, type: 1} + }, + { + key: {uid: 1} + }, + { + key: {ttl: 1}, expireAfterSeconds: 7 * 24 * 3600 + } + ], hbzb_user_cross: [ { key: {uid: 1}, unique: true + }, + { + key: {jifen: 1} + }, + { + key: {rank: 1} + }, + { + key: {zbsgroup: 1} } ], hbzb_user_zbs: [ @@ -377,13 +407,52 @@ const crossIndexs: Partial<{ [k in keyof MongodbCollections]: IndexDescription[] rankList: [ { key: {type: 1, idKey: 1}, unique: true - } + }, + { + key: {valArr: -1} + }, + ], + wzry_fight: [ + { + key: {jifen: 1} + }, + { + key: {uid: 1} + }, + { + key: {zkey: 1} + }, + ], + wzry_user_cross: [ + { + key: {jifen: 1} + }, + { + key: {uid: 1} + }, + { + key: {zkey: 1} + }, ] }; export async function initMongoDB() { + //mongodb连接数说明:https://blog.csdn.net/for_cxc/article/details/116859714 + //可结合查看:node_modules\mongodb\lib\connection_string.js + //maxPoolSize默认值:100 + + let option:MongoClientOptions; + //跨服只有1个,直接采用默认配置就行 + if(G.argv.serverType != 'cross'){ + if(PublicShared.getOpenServerDay() > 3){ + option = { + maxPoolSize: 10 + } + } + } + console.log('connect mongodb ......'); - let client = await MongoClient.connect(G.argv.serverType == 'cross' ? G.config.crossMongodbUrl : G.config.mongodbUrl); + let client = await MongoClient.connect(G.argv.serverType == 'cross' ? G.config.crossMongodbUrl : G.config.mongodbUrl, option); G.mongodb = new _mongodb(client.db(G.config.dbName || '')); console.log('connect mongodb succ'); @@ -391,7 +460,9 @@ export async function initMongoDB() { if (G.argv.serverType != 'cross') { console.log('connect crossmongodb ......'); //本服里,维持住跟跨服数据库的链接 - let crossClient = await MongoClient.connect(G.config.crossMongodbUrl); + let crossClient = await MongoClient.connect(G.config.crossMongodbUrl,{ + maxPoolSize:10 + }); G.crossmongodb = new _mongodb(crossClient.db(G.config.corssDBName || "")); console.log('connect crossmongodb succ'); }