Apollo 技术文档Apollo 技术文档
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
  • MMORPG 架构 QA

Q32: 如何设计邮件系统?

核心结论

游戏邮件系统本质上不是“站内信”,而是“离线投递加附件结算系统”。

真正难点通常不在收件箱界面,而在:

  • 附件是否可重复领取
  • 邮件是否可批量投递
  • 过期和删除怎么处理
  • 系统邮件与玩家邮件是否共用一套链路

只要涉及附件,邮件系统就已经进入资产系统范畴。

一、先区分邮件类型

常见至少有:

  • 系统邮件
  • 活动奖励邮件
  • GM 补偿邮件
  • 玩家互动邮件
  • 战报或结算邮件

它们的规模、审计要求和风控要求都不一样,不应完全共用一套简单逻辑。

二、邮件系统真正的核心能力

通常包括:

  • 投递
  • 列表查询
  • 标记已读
  • 领取附件
  • 过期清理

其中最关键的是附件领取,因为这一步直接影响资产正确性。

三、附件领取必须具备幂等

只要客户端重试、断线重连、重复点击、超时重发存在,附件领取就必须防重复。

更稳妥的做法通常是:

  • 邮件状态和附件状态分开管理
  • 领取动作有明确幂等保护
  • 资产发放有流水

否则很容易出现重复领取事故。

四、系统邮件和玩家邮件为什么应区别对待

1. 系统邮件

特点通常是:

  • 发送量大
  • 内容模板化
  • 附件标准化

更适合做批量投递或逻辑投递。

2. 玩家邮件

特点通常是:

  • 数量少
  • 交互更强
  • 风控要求更高

例如要限制骚扰、频率和非法交易风险。

五、邮件存储不一定是一封信一份完整拷贝

特别是系统邮件海量群发时,如果每个玩家都复制完整正文和附件,会很浪费。

更合理的思路通常是:

  • 模板和正文分离
  • 投递记录与模板关联
  • 玩家收件箱只保存归属和状态

这样更容易支撑大批量活动邮件。

六、过期和删除要先定规则

邮件系统长期最容易失控的地方是生命周期管理。

需要先定义:

  • 未领取附件多久过期
  • 已领取邮件保留多久
  • 未读邮件能否删除
  • 删除是逻辑删除还是物理清理

这些规则直接决定清理作业和用户体验。

七、离线通知和实时通知要分开

玩家在线时,可以实时提示“收到新邮件”;玩家离线时,只需保证投递结果正确。

不要把“提醒”误当成“投递成功”的定义。

真正权威的是:

  • 邮件是否进入可查询状态
  • 附件是否已成功领取并记账

八、工程上更稳妥的组合

常见做法是:

  • 邮件主表或模板表保存邮件元数据
  • 收件关系表保存每个玩家的邮件状态
  • 附件领取走幂等资产发放链路
  • 定时任务清理过期邮件

这样能把展示、投递、资产结算拆开。

九、常见误区

1. 邮件系统只是聊天的离线版本

不对。只要有附件,它就已经是资产系统的一部分。

2. 一封邮件删掉就完了

如果有未领取附件、审计要求或批量模板投递,删除逻辑并不简单。

3. 批量发邮件就是循环 insert

规模一上来,这会给数据库和任务系统带来很大压力,通常需要模板化和批量化设计。

参考资料

  • 各类在线游戏系统邮件、补偿邮件与附件幂等实践资料
在 GitHub 上编辑此页
最后更新: 3/20/26, 6:06 AM
贡献者: cuihairu