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

【框架设计】事件总线 EventBus:模块解耦的胶水层

2026-09-20 07:58 作者:996 技术组 3 阅读 996引擎Lua教程传奇脚本

直调的痛:牵一发动全身

业务初期,模块之间直接互相调用:充值成功后,充值模块去调背包加道具、调公告、调成就统计。三个月后加"充值返利",又得改充值模块。问题不在业务,在于依赖方向错了——上游模块不应该知道下游有谁。

事件总线(EventBus)的解法:模块只负责"发布事件",不关心谁在听;关心者自行"订阅事件"。充值模块只发一条 RECHARGE_OK,背包、公告、返利各自监听处理。新增需求 = 新增订阅者,上游零改动。

lua
local Bus = { listeners = {} }

function Bus.on(event, fn)
    Bus.listeners[event] = Bus.listeners[event] or {}
    table.insert(Bus.listeners[event], fn)
end

function Bus.emit(event, ...)
    local list = Bus.listeners[event]
    if not list then return end
    for _, fn in ipairs(list) do fn(...) end
end

-- 充值模块只发事件
Bus.emit("RECHARGE_OK", playerId, amount)
-- 各模块各自订阅
Bus.on("RECHARGE_OK", GiveItems)
Bus.on("RECHARGE_OK", SendAnnounce)

四条工程纪律

事件名集中定义。 用一张常量表管理事件名,防止"RechargeOk / RECHARGE_OK / recharge_ok"三套拼写并存——字符串事件名裸写是事件系统腐化的开始。

订阅必须能反注册。 Bus.off(event, fn)on 成对存在,界面销毁、对象删除时调用。否则监听闭包抓着已销毁的界面引用,轻则空指针报错,重则内存泄漏。上一轮讲过的闭包泄漏,事件总线是最常见的泄漏源头。

处理器内不得抛错炸全场。 emit 时用 pcall 包住每个监听器,单个处理器出错记日志、继续执行其余监听,保证一个模块的 bug 不阻断整条事件链。

同步为默认,异步要显式。 emit 是同步派发,处理器立即执行;需要延迟/分帧的用 emitLater 走协程或定时器。混用而不标记,时序问题将极难排查。

边界在哪

事件总线不是银弹:事件链一长,"谁动了数据"会变难查。约定两条线——强依赖、必达的逻辑走直接调用;广播性质、可有可无的副作用走事件。把事件名、参数结构写进文档,事件总线才是解耦神器而不是谜团制造机。

作者履历与出处

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

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

最新技术文章 · 实战干货

LATEST ARTICLES

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

框架设计战斗系统

【框架设计】BOSS 归属:伤害贡献与掉落分配

实战应用:用在哪里 祖玛教主倒下的瞬间,掉落的裁决之杖归谁?BOSS 的归属规则是打宝生态的宪法:单挑的归属清晰、组队的分配…

2026-09-21 19:46 996 技术组 · 0 阅读
框架设计新手引导

【框架设计】新手村动线:前 30 分钟的任务编排

实战应用:用在哪里 新手村的前 30 分钟决定一款游戏的留存:玩家在这半小时里学会移动、战斗、拾取、加行会——学会的速度就是…

2026-09-21 19:46 996 技术组 · 0 阅读
性能调优定时器

【性能调优】定时器合并:同频任务的统一调度

实战应用:用在哪里 每个功能都爱挂定时器:扫邮件的、刷怪的、发奖的、心跳的——一百个定时器各自为政,调度层的开销与定时器的数…

2026-09-21 19:46 996 技术组 · 0 阅读
安全加密交互安全

【安全加密】高危操作确认:不可逆动作的防误设计

实战应用:用在哪里 丢弃裁决之杖、解散行会、删除好友——不可逆的操作一旦执行就没有后悔药。高危操作的确认设计是防误的闸门:让…

2026-09-21 19:46 996 技术组 · 0 阅读
工具链联调测试

【工具链】协议 Mock:前端联调的假服务器

实战应用:用在哪里 前端的功能开发经常被服务器档在门外:后端的接口没写完,前端只能干等或造假数据。协议 Mock 在本地扮演…

2026-09-21 19:46 996 技术组 · 0 阅读
网络通信聊天系统

【网络通信】私聊消息:点对点投递与离线转邮件

实战应用:用在哪里 私聊是玩家社交的私信箱:交易的对口、好友的寒暄、行会的动员暗号全走私聊。私聊协议的要点是点对点的寻址、离…

2026-09-21 19:46 996 技术组 · 0 阅读