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

【网络通信】消息优先级:战斗包与聊天包的分级通道

2026-09-21 13:21 作者:996 技术组 网络通信

实战应用:用在哪里

沙巴克攻城时战斗包与聊天包挤同一条队列:几百人的技能与移动消息被刷屏的闲聊消息压在后面,操作的延迟直接改写战局。消息优先级把网关出队列分成三档通道,战斗包永远优先于聊天包,拥塞时丢闲聊保操作。

三档通道的入队

lua

---网关发送队列:按优先级分档
local CH = {
    { q = {}, limit = 500, budget = 20 },  -- P0 战斗/移动
    { q = {}, limit = 300, budget = 60 },  -- P1 交互/物品
    { q = {}, limit = 200, budget = 200 }, -- P2 聊天/特效
}

function CH.push(conn, pkg, pri)
    local c = CH[pri] or CH[3]
    if #c.q >= c.limit then
        if pri >= 2 then return false end -- P2 满则丢弃
        table.remove(c.q, 1)              -- 高优挤掉最老包
    end
    c.q[#c.q + 1] = { conn = conn, pkg = pkg, at = os.clock() }
    return true
end

三档通道各自有队列上限与排队预算:P0 战斗包的预算 20 毫秒、P2 聊天包 200 毫秒。P2 队列满直接丢新包,P0 队列满挤掉最老的包——移动包过期无意义,最新位置才有价值。技能施放、移动同步走 P0,物品拾取与界面请求走 P1,聊天与飘字特效走 P2。

出队列的预算调度

lua

---每帧的发送调度:按预算逐档下发
function CH.drain()
    local frameStart = os.clock()
    for pri = 1, 3 do
        local c = CH[pri]
        while #c.q > 0 do
            local item = table.remove(c.q, 1)
            sendPkg(item.conn, item.pkg)
            if (os.clock() - frameStart) * 1000 >= c.budget then break end
        end
        if (os.clock() - frameStart) * 1000 >= c.budget then break end
    end
end

每帧按 P0 到 P2 的顺序下发,高档的预算耗尽即让位给下一帧,低档永远等高档清空或超时。500 人攻城的实测:P0 的排队延迟稳定在 18 毫秒内,P2 聊天在拥塞时放宽到 250 毫秒,玩家对聊天的延迟无感而对技能延迟敏感。拥塞期间 P2 的丢包率公开在网关监控上,丢的是闲聊不是操作。

验证与监控

三档通道的队列长度与丢包率分档监控,P0 的丢包率必须恒为零,非零即为容量规划失误。

踩坑记录

分档初期把回城卷轴的传送确认划进 P2,玩家点回城没反应,交互类的确认框统一回归 P1。预算的检查曾经放在包内循环之外,单帧发了 3000 个聊天包卡了一帧,预算判断移进循环。P0 挤掉最老包的逻辑曾经误伤战斗结果包,移动包与结果包再分两级,结果包永不挤占。

上线要点

包到通道的映射表集中维护,新消息类型接入必须登记优先级,未登记的默认 P1。优先级策略在攻城、开服等高峰档期可动态收紧:P2 的预算从 200 毫秒压到 100 毫秒。客户端对 P2 丢弃静默处理,聊天消息的序号连续性由客户端按缺口重排,界面上不产生跳变。

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

作者履历与出处

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

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

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

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

玩法策划远征编制

【玩法策划】跨服远征编制:借鉴MMO远征的分层推进方案

实战应用:用在哪里 跨服远征分先锋、主力、后勤三队独立推进,三线全通合围BOSS。不同战力成员都有参与感。 策划要点与配置 …

2026-09-22 21:15 996 技术组
案例复盘副本难度

【案例复盘】副本超时惩罚倍率复盘

实战应用:用在哪里 副本限时挑战加入超时血量惩罚:超时后BOSS攻击递增。上线后BOSS攻击叠到十倍秒杀全队。 事故还原与补…

2026-09-22 21:15 996 技术组
界面UI神兽特效

【界面UI】混沌麒麟入场特效:神兽召唤的三段演出设计

实战应用:用在哪里 混沌麒麟召唤是全服高光时刻:暗幕聚合、裂缝展开、麒麟着陆三段演出各1.3秒。 三段式入场演出编排 围观镜…

2026-09-22 21:15 996 技术组
前端接口任务回看

【前端接口】任务对话历史回看:对话记录的界面查询实现

实战应用:用在哪里 任务对话一闪而过玩家想回顾。回看接口把对话按节点存档,面板翻阅全部对话记录。 对话存档与查询渲染 当前章…

2026-09-22 21:15 996 技术组
引擎触发懒加载地图

【引擎触发】挂机地图按需激活:地图实例懒加载设计

实战应用:用在哪里 服务器承载六十张地图,空闲地图白耗资源。按需激活,末人离开后六十秒休眠。 激活与休眠触发 休眠回收 验证…

2026-09-22 21:15 996 技术组
Lua实战坐骑洗炼

【Lua实战】坐骑资质洗炼与锁定:资质系统的Lua实现

实战应用:用在哪里 坐骑资质洗炼随机重滚五条属性,锁定满意的条目不再重滚,锁定越多消耗越大。 洗炼与锁定 锁定消耗递增 验证…

2026-09-22 21:15 996 技术组