战区制上线后,黄金、白银、青铜三区的榜单分散在各区服务,玩家想看全区视野就要一份合并榜。汇聚方案:各区定时上报本区前列数据,汇聚侧合并排序推送合并榜,战区自治与全局视野兼得。
各区每小时上报本区前五十名,数据带区号与时间戳,汇聚侧校验新鲜度后入库。
setontimerex(95, 3600)
function ontimer95()
local list = getZoneTopAll("gold", 50)
for rank, rec in ipairs(list) do
sendluamsg(rec.name, 8101, rank, 0, 0, "gold|" .. rec.name .. "|" .. rec.power)
end
end
汇聚侧收到三区数据后按战力统一排序,推送合并榜给订阅了全区视野的玩家。
local merged = {}
local function onZoneReport(zone, rank, name, power)
merged[name] = { zone = zone, rank = rank, power = power }
if countEntries() >= 150 then
table.sort(mergedList(), function(a, b) return a.power > b.power end)
pushGlobalTop(50)
end
end
三区数据注入验证合并排序与去重;某区断报时合并榜降级为双区榜并标注缺区。监控各区上报的准时率,缺报超过一个周期就告警,合并榜的可信度取决于最懒的那个区。
merged按名字做键,跨区同名玩家互相覆盖,键拼区号才唯一,改名同步在跨服场景加倍重要。sendluamsg逐条上报五十名是五十次调用,改批量串一次携带,出包次数降一个量级。合并排序在每次上报后全量重排,一小时一次可以接受,实时榜要改增量插入。玩家跨区搬迁后旧区数据残留,搬迁事件要触发两区的数据修正,否则合并榜出现分身。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 排行榜卡死拖累登录、成就推送挤占带宽,这些非核心功能出问题时最需要的是一个总闸。服务降级预案定义了核心链…
实战应用:用在哪里 单件装备的属性提升有限,套装共鸣让多件装备产生化学反应:穿戴同系三件以上触发共鸣属性,五件触发全局光环。…
实战应用:用在哪里 同一账号在两台设备同时在线,一台打怪一台交易,是盗号者测试密码后的标准动作。多设备在线检测在登录环节检查…
实战应用:用在哪里 老服合并、机房迁移、数据分库改造,都涉及角色数据的批量搬家。数据迁移的核心是搬运过程中不断服、不丢数据、…
实战应用:用在哪里 沙影之路的暗之Boss是行会实力的试金石:真身与三个镜像随机分布在四个祭坛,只有击杀真身才有掉落,镜像被…
实战应用:用在哪里 攻城战最容易变成人海推门的无脑玩法。攻城拔寨将城门攻坚设计为三线战术:正面强攻吸引火力、侧翼工程车破城、…