聊天表情功能重做后,老的 7005 表情协议仍有旧版客户端在发,服务端每秒要处理上千条无效消息。协议废弃分三步走:双发过渡、只收新号、统计拒收,任何一步都有数据支撑,老协议号下线不再靠猜。
过渡期内服务端同时下发新老两个协议号,内容保持一致,旧客户端读老号不受影响,新客户端读新号拿同样数据。
local NEW_ID = 7305
local OLD_ID = 7005
local dualSend = true
local function pushEmote(actor, payload)
sendluamsg(actor, NEW_ID, 0, 0, 0, payload)
if dualSend then
sendluamsg(actor, OLD_ID, 0, 0, 0, payload)
end
end
入口统计老协议号的到达次数,占比跌破全量百分之一才关闭双发,关闭后老号到达只计数不再处理内容。
local legacyCnt, totalCnt = 0, 0
local function onLegacyMsg()
legacyCnt = legacyCnt + 1
totalCnt = totalCnt + 1
if totalCnt > 1000 and legacyCnt * 100 / totalCnt < 1 then
dualSend = false
sendcentermsg("旧版表情协议已完成下线")
end
end
双发期核对新旧号内容逐字节一致;关闭双发后旧客户端不再收到推送,新客户端无感;拒收计数与客户端版本分布对得上。监控老协议号流量占比曲线,占比反弹说明有批次客户端回滚了版本,需要重新评估下线节奏。下线公告提前两周发放,附上强制更新的最低版本号与下载入口,给滞后玩家留出升级通道。老号下线的三个阶段各留两周缓冲,节奏宁慢勿快,避免把兼容问题变成回归事故。
双发的内容格式直接复用了新协议结构,旧客户端解析新结构报错,双发期内容必须按老结构组装。占比统计的分母用了在线人数而不是消息总量,人数波动让占比失真,分母统一改为消息总量。协议下线后忘了删服务端的老号处理分支,半年后清理时发现分支还在白跑,下线动作与代码清理列进同一个任务。有个第三方合作伙伴的接入文档还写着老号,废弃前逐一通知了对接方并给了两个月的缓冲期。废弃节奏宁慢勿快,每个阶段都以数据达标为前提,不设一刀切的截止时刻。废弃流程通知对接方设为必选项,缓冲期统一延长到三个月。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 行会活动集中在攻城战,日常缺乏轻量社交场景。行会篝火答题做行会固定社交活动:每周三、周日晚在行会驻地点燃…
实战应用:用在哪里 全服答题活动办过几期,参与的人不少但黏性不足,答完就散。科举答题把答题做成两段式:每天晚八点的乡试答题筛…
n n n 实战应用:用在哪里 n战斗中打字沟通慢且危险,队伍协作靠喊话效率太低。快捷短语栏在屏幕底部提供八条可自定义的战斗…
n n n 实战应用:用在哪里 n龙脉区域的野外宝箱是散人玩家的每日福利:每逢整点在龙脉区域随机刷新十五个宝箱,分三档给不同…
实战应用:用在哪里 同一玩家的两条消息走了不同的处理路径,先发的后到,装备穿上的消息比脱下的消息晚处理,面板状态错乱。消息有…
实战应用:用在哪里 战斗日志全量打印,一天写满一块硬盘,翻日志像大海捞针。日志采样按类别分策略:错误日志全量保留、行为日志按…