feat(config): redis中添加最大同时在线人数

This commit is contained in:
liangtongchuan
2023-05-07 13:04:40 +08:00
parent 7ffbcd7098
commit e2ffab7345
4 changed files with 27 additions and 10 deletions

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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

View File

@@ -103,17 +103,25 @@ export default class Utils extends Service {
// 检测是否可以登录
public async validateCanLogin() {
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);
const Max = await redisClient.getAsync(REDIS_KEY.MAX_ONLINE_USERS);
if(count >= gameData.serverConst.MAX_ONLINE_USER_COUNT) {
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;
}
}
// 比较以 . 分隔的版本号。返回 0 则版本号相等,返回正数则 versionA 大,返回负数则 versionB 大