✨ feat(config): redis中添加最大同时在线人数
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 大
|
||||
|
||||
Reference in New Issue
Block a user