新服预约 8 万人,首日在线冲到 1.2 万,入口排队、地图爆满、广播刷屏三个问题同时爆发。容量预案按在线水位分三级:3000 起一级预案收紧体验类功能,9000 触发三级排队限流,升降都由引擎定时器自动驱动。预案的目标不是扛住峰值,是把峰值体验的衰减顺序定好:先砍表现层,再砍生态层,限流放在最末,玩家感知层层递进而非突然掉线。
全局定时器每 60 秒读一次 grobalinfo(6),按阈值算出目标档位,只升不降,回落转人工确认后手动降级,防止水位抖动来回切。
setontimerex(133, 60)
function ontimer133()
local n = grobalinfo(6)
local level = 0
if n >= 9000 then
level = 3
elseif n >= 6000 then
level = 2
elseif n >= 3000 then
level = 1
end
local cur = tonumber(getsysvar("CAP_LEVEL") or "0")
if level > cur then
setsysvarex("CAP_LEVEL", level, 1)
sendcentermsg("当前在线 " .. n .. ",容量预案升至 " .. level .. " 级")
end
end
每一级预案对应一组脚本动作,升级时逐级执行到位;动作收敛在统一入口,值班只需要盯广播与执行回执。
local PLAN = {
{ lv = 1, script = "cap_plan_1", desc = "关闭飘字与烟花特效" },
{ lv = 2, script = "cap_plan_2", desc = "野外怪物上限下调四成" },
{ lv = 3, script = "cap_plan_3", desc = "入口排队限流" },
}
function applyPlan()
local lv = tonumber(getsysvar("CAP_LEVEL") or "0")
for _, p in ipairs(PLAN) do
if p.lv <= lv then
callscript(p.script)
end
end
end
压测模拟 3000、6000、9000 三档水位,核对逐级置位与动作执行;水位回落到 2800 核对不自动降级;三级预案下入口排队与等待提示生效。监控预案档位变更时刻与执行回执,升到三级后每 10 分钟播一次排队进度。回滚演练单独跑:手动清零 CAP_LEVEL 后逐级动作撤销,特效与怪物上限恢复基准值。
升降对称的版本在 6000 边界来回抖,一分钟升降一轮广播刷屏,改成升 3000 降 2400 的迟滞区间才稳。grobalinfo(6) 的口径是引擎进程在线,与网关连接数差了一截跳线玩家,两套数字都看,以引擎侧为预案依据。callscript 的脚本名必须在引擎注册过,预案 2 的脚本名拼错导致动作静默没执行,在线爆表时怪物上限没降,回执核对才暴露。预案动作清单曾写在值班文档里靠人执行,开服当天值班忙不过来漏了两项,全部收敛进脚本入口。排队提示间隔 10 秒一轮,调到 30 秒后投诉才降,等待中的玩家宁可要慢提示也不要安静。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 装备回收商 NPC 每天按评分收购玩家的装备,裁决之杖、骨玉权杖按攻击、持久加权打分,榜上只要前五名。数…
实战应用:用在哪里 沙巴克攻城是全服行会战的最高舞台:攻方砸开城门、抢占皇宫,守方依托城墙与复活点反打。规则设计的关键是节奏…
实战应用:用在哪里 影分身玩法给法师职业补上生存短板:危急时刻召唤四个影分身分担仇恨,敌人需要在六格范围内分辨真身,猜错就浪…
实战应用:用在哪里 组队邀请、行会宣战这类关键信令丢了没有兜底,玩家只能反复手点,高峰期体验很差。重试机制给信令加确认回执:…
实战应用:用在哪里 新资料片上线首日预约量常是日常十倍,一口气全开会让数据库与登录网关同时过载。滚动开区把开区动作排成队列:…
实战应用:用在哪里 百人同屏的沙巴克外围战场,每个玩家每秒跑动会触发数次位置更新,全部即时下发时广播量随人数平方增长,网关先…