运营每天早上要看前一天的在线峰值、新增、充值、沙巴克战况等十二项指标,靠人工盘变量既慢又错。服务端零点自动聚合写报表,邮件直达运营邮箱,五分钟出数。
业务动作发生时顺手累加内存计数器,零点统一落盘,避免高频写变量。
local RPT = { newplayer = 0, boss = 0, arena = 0, trade = 0 }
function rptCount(key)
RPT[key] = (RPT[key] or 0) + 1
end
全局定时器在零点把计数器拼成报表串,setsysvarex落盘留档,sendmail发给运营角色。
setontimerex(905, 86400)
function ontimer905()
local buf = "日期:" .. os.date("%m-%d")
for k, v in pairs(RPT) do
buf = buf .. ";" .. k .. "=" .. v
RPT[k] = 0
end
local tag = "RPT_" .. os.date("%m%d")
setsysvarex(tag, buf, 1)
sendmail("oper_admin", 0, "每日数据报表", buf, "")
end
测试环境把定时器间隔改成60秒验证聚合与清零逻辑,上线前改回86400秒。报表落盘后随机抽读三天数据与业务日志对账,误差超过百分之二说明有计数器漏埋。
setontimerex按服务启动时间起算,中午重启会把零点报表推到次日中午,重启后要按当日剩余秒数重设间隔。计数器只加不清会越滚越大,ontimer里清零动作漏写,报表数字就会翻倍虚高,这是最常见的事故形态。sendmail的目标是运营专用角色,用变量存角色名,换人不用改代码。报表串别塞动态明细,只放当日汇总,明细走日志文件,邮件超长会被截断。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…
实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…
实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…
实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…
实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…
实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…