CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
网络通信断线重连前端开发

【网络通信】断线重连去重:消息序号防止奖励重复弹窗

2026-09-22 04:51 作者:996 技术组 0 阅读 996引擎Lua教程传奇脚本网络通信断线重连前端开发

弱网环境下断线重连是家常便饭,但重连后服务端补发的消息可能跟断线前的尾部几条重复:奖励弹窗弹两次、邮件红点闪个不停。本文在996引擎前端用消息序号做去重过滤。

场景与痛点

玩家在通勤路上玩游戏,网络抖动断线三秒后自动重连。服务端的下行消息有补发机制,断线窗口内的消息会重发一遍,客户端如果不加处理,同一条获奖通知就会触发两次弹窗与音效。更麻烦的是请求类消息也可能因重试被发出两次,服务端扣两次道具。

实现思路

服务端给每条下行消息带自增序号,客户端记录已处理的最大序号,小于等于它的直接丢弃。上行方向客户端给请求也带序号,服务端对写操作请求做幂等校验,同一序号只执行一次。

关键实现

lua
local lastSeq = 0
SL:RegisterLuaNetMsg(7001, function(data)
    local seq = tonumber(data.seq) or 0
    if seq <= lastSeq then return end
    lastSeq = seq
    handleAward(data)
end)

上行请求同样封装序号,等待服务端回执后才算完成:

lua
local reqSeq = 0
local pending = {}
local function sendReq(cmd, body)
    reqSeq = reqSeq + 1
    pending[reqSeq] = true
    SL:SendNetMsg(cmd, { seq = reqSeq, body = body })
end

服务端对写操作按序号判重,重复请求只回执不执行,客户端收到回执后清掉pending记录。

细节与避坑

lastSeq不要存在UI层变量里,重连重建界面后会归零,必须挂在持久会话对象上。序号接近溢出前要约定重置协议,服务端发重置消息后双方同步归零,窗口期内暂时改用内容摘要判重。展示类消息允许丢弃,写类消息必须幂等,两类协议分开设计。重连成功后先拉一次全量状态再开增量通道,避免序号断档造成丢消息。

小结

序号去重是断线重连的标配伴生机制,客户端丢弃重复下行,服务端幂等上行,两半拼在一起才完整。只做客户端去重的方案,挡不住请求重放。

延伸思考

把序号机制下沉到网络库封装层,业务代码无感知,是长期最省心的做法。多人副本场景还要考虑广播消息与私发消息共用序号空间还是分开,建议分开,互不干扰。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

玩法策划悬赏赏金防刷

【玩法策划】悬赏捕杀:悬赏发布与赏金结算

实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…

2026-09-23 10:18 996 技术组 · 0 阅读
工具链配表校验引用

【工具链】配表校验器:数值边界与引用完整性

实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…

2026-09-23 10:18 996 技术组 · 0 阅读
后端接口行会擂台结算

【后端接口】行会擂台:守擂判定的接口实现

实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…

2026-09-23 10:18 996 技术组 · 0 阅读
Lua实战二叉堆排行榜伤害

【Lua实战】二叉堆:伤害排行榜的有序插入

实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…

2026-09-23 10:18 996 技术组 · 0 阅读
网络通信九宫格视野广播

【网络通信】九宫格视野:同屏广播的范围控制

实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…

2026-09-23 10:18 996 技术组 · 0 阅读
安全加密输入校验注入拦截

【安全加密】入库防护:玩家输入的参数校验与拦截

实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…

2026-09-23 10:18 996 技术组 · 0 阅读