diff --git a/game-server/app.ts b/game-server/app.ts index 5e2c2494a..a18ca021d 100644 --- a/game-server/app.ts +++ b/game-server/app.ts @@ -235,6 +235,7 @@ async function treatStartLogic(app: _pinus.Application) { redisService.clearGVGHistoryAreas(); redisService.clearGVGHistoryAreaTeam(); redisService.clearGVGHistoryCityTeam(); + redisService.resetMaxOnlineUsers(); updateTeamStatus(COM_TEAM_STATUS.DEFAULT, COM_TEAM_STATUS.LOOSE); updateTeamStatus(COM_TEAM_STATUS.FIGHTING, COM_TEAM_STATUS.LOOSE); } @@ -292,7 +293,7 @@ function initRedis(app: _pinus.Application) { app.set('redis', redisClient); const redisClientPub = connectRedis(app.get('database').redis, app.get('database').redispw); app.set('redisPub', redisClientPub); // 发布订阅机 - app.set('redis', redisClient); + // app.set('redis', redisClient); const redisClientLock = connectRedis(app.get('database').redisLock||app.get('database').redis, app.get('database').redisLockpw||app.get('database').redispw); redLockService.initRedlock(redisClientLock); redlockCacheService.init(); diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index 9b876f9f6..2ba84bb48 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -1,4 +1,4 @@ -import { ACTIVITY_TYPE, getRedisKeyByRankType, GUILD_ACTIVITY_TYPE } from './../consts'; +import { ACTIVITY_TYPE, getRedisKeyByRankType, GUILD_ACTIVITY_TYPE, MAX_ONLINE_USER_COUNT } from './../consts'; import * as Redis from 'redis'; import {REDIS_KEY} from '../consts' import { pinus, ServerInfo } from 'pinus'; @@ -777,4 +777,8 @@ export async function clearGVGHistoryCityTeam() { return result; } - +// 设置最大同时在线人数 +export async function resetMaxOnlineUsers() { + const res = await redisClient().setAsync(REDIS_KEY.MAX_ONLINE_USERS, `${MAX_ONLINE_USER_COUNT}`); + return res; +} diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index c38241b85..6b29dc829 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -23,6 +23,9 @@ export const REF_CIRCLE_MAIL_TIME = 6; // 统一一天刷新定期邮件时间 export const PUSH_BATCH = 100; // 推送分批人数 export const PUSH_INTERVAL = 5 * 1000; // 分批时间,5秒一批 +export const CLOSE_LOGIN_WHEN_ONLINE_MAX = 1; // 是否在服务器达到最大在线人数限制时关闭登录 +export const MAX_ONLINE_USER_COUNT = 100000; // 最大在线人数限制 + export enum TIME_OUTPUT_TYPE { DATE = 1, STAMP_10 = 2, @@ -270,6 +273,7 @@ export enum REDIS_KEY { ACTIVITY_MINI_GAME ='miniGame', // 活动小游戏排行榜 PUBLIC_ACCOUNT_GIFT = 'pubAccGiftChannel', // 公众号频道 SEND_GIFT_CODE = 'sendGiftCodeChannel', // 礼包码频道 + MAX_ONLINE_USERS = 'maxOnlineUsers', // 最高在线人数限制 } // 各排行榜对应hash的key diff --git a/web-server/app/service/Utils.ts b/web-server/app/service/Utils.ts index d9a255c10..5e3487062 100644 --- a/web-server/app/service/Utils.ts +++ b/web-server/app/service/Utils.ts @@ -103,17 +103,25 @@ export default class Utils extends Service { // 检测是否可以登录 public async validateCanLogin() { - if(gameData.serverConst.CLOSE_LOGIN == 1) return false; - if(gameData.serverConst.CLOSE_LOGIN_WHEN_ONLINE_MAX) { + try { + if(gameData.serverConst.CLOSE_LOGIN == 1) return false; + if(gameData.serverConst.CLOSE_LOGIN_WHEN_ONLINE_MAX) { - let redisClient: RedisClient = this.ctx.app.context.redisClient; - let count = await redisClient.hlenAsync(REDIS_KEY.ONLINE_USERS); + let redisClient: RedisClient = this.ctx.app.context.redisClient; + let count = await redisClient.hlenAsync(REDIS_KEY.ONLINE_USERS); + const Max = await redisClient.getAsync(REDIS_KEY.MAX_ONLINE_USERS); - if(count >= gameData.serverConst.MAX_ONLINE_USER_COUNT) { - return false + console.log('validateCanLogin:', count, Max); + if(Max && count >= parseInt(Max)) { + console.log('validateCanLogin false:', count, Max); + return false + } } + return true; + } catch(e) { + console.error('validateCanLogin', e); + return true; } - return true; } // 比较以 . 分隔的版本号。返回 0 则版本号相等,返回正数则 versionA 大,返回负数则 versionB 大