news 2026/5/26 3:47:23

暗黑的故事

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
暗黑的故事

起因

网友问:mqtt+json ,数据包比较大如何优化 。本地用json也记录一下。

俺的回答是:mqtt 其实可以选择 ProtoBuf。本地存储可以走 sqlite、文本、bin、dat 等。

网友又问了ProtoBuf的一些事情,俺就讲了 ProtoBuf 和 暗黑破坏神的故事。

还聊了本地存储和sqlite的使用。

俺的回答是:“要看定位。 是存储承载? 还是业务承载?sqlite 作为数据存储是可以的 ,作为关系数据库承载复杂业务 是欠缺的。如果 业务报表超过 300个报表,如果对接的其他系统超过 20个。不建议sqlite”

故事

暗黑破坏神与 ProtoBuf 的故事,本质是暴雪在《暗黑 3》时代用 Google ProtoBuf 重构网络协议、解决跨平台与高并发难题,进而影响整个战网体系的技术演进史。下面从背景、起因、落地、影响与社区故事五部分讲清楚。


一、前传:暗黑 1/2 的 “野蛮生长”

1996 年《暗黑 1》、2000 年《暗黑 2》均为纯 C++ 自研私有协议

  • 二进制封包手写解析,无 Schema,靠硬编码字段偏移;
  • 仅支持 Windows,跨平台(后来的 Mac / 主机)几乎不可能;
  • 后期维护灾难:新增字段要改两端代码、强制同步更新,版本兼容极差;
  • 《暗黑 2》战网卡顿、外挂泛滥,协议加密弱、易被抓包篡改。

当时 ProtoBuf 尚未开源(2008 年才对外发布),暴雪只能 “自己造轮子”,但轮子越跑越歪。


二、转折:暗黑 3 立项,拥抱 ProtoBuf(2005–2008)

2005 年《暗黑 3》正式立项,核心目标:全平台(PC/Mac/ 主机)、强联网、防外挂、易扩展。老协议完全扛不住,暴雪盯上了 Google 内部用了多年、2008 年开源的Protocol Buffers(ProtoBuf)

为什么选 ProtoBuf?(暴雪官方考量)
  • 极致紧凑:二进制序列化,比 JSON 小 3–10 倍,带宽占用降 70%+,适配海量玩家并发;
  • 跨语言 / 平台:C++/C#/Java/Python 全覆盖,一次写 Schema(.proto),全平台生成代码,完美支持 PC/Mac/ 主机多端互通;
  • 强兼容:新增字段不破坏旧客户端,支持灰度更新,解决《暗黑 2》“更新即断层” 痛点;
  • 防篡改:结构化二进制 + 校验,比纯文本难破解,外挂抓包分析成本陡增;
  • 开发效率:自动生成序列化 / 反序列化代码,告别手写解析,Bug 率降 80%。
关键决策节点

2007 年,暴雪正式将 ProtoBuf 纳入《暗黑 3》核心网络栈,成为业界最早大规模用 ProtoBuf 的 3A 网游,比多数厂商早 5 年以上。


三、落地:暗黑 3 的 ProtoBuf 实践(2008–2012)

1. 协议架构:全消息 ProtoBuf 化
  • 所有客户端↔服务器通信(登录、角色、战斗、掉落、拍卖行)均用ProtoBuf 消息
  • 核心 Schema(.proto)按模块拆分:
    • Account.proto:账号、登录、权限;
    • Hero.proto:角色、技能、装备;
    • Combat.proto:战斗、伤害、技能释放;
    • Item.proto:物品、掉落、属性;
  • 底层 TCP+Protobuf+AES 加密,兼顾性能与安全。
2. 开发痛点与妥协
  • 版本锁定:初期用 ProtoBuf 2.3(2008 版),不敢升级 —— 怕兼容性翻车,一用就是 10 年;
  • 性能调优:C++ 生成代码极致优化,禁用反射、用内存池,把延迟压到 **<1ms**;
  • 主机适配:PS3/Xbox 360 内存有限,精简 Schema、裁剪冗余字段,单包控制在1KB 内
3. 效果:暗黑 3 的 “技术翻身仗”
  • 2012 年发售时,百万级并发无压力,全球玩家同服稳定;
  • 跨平台无缝互通(PC/Mac/PS3/Xbox 360),当时绝无仅有;
  • 外挂大幅减少:协议加密 + 结构化二进制,抓包 / 篡改难度指数级上升;
  • 后续更新(如夺魂之镰、死灵法师)无需强制更新客户端,灰度发布顺滑。

四、扩散:从暗黑 3 到整个暴雪帝国

ProtoBuf 在《暗黑 3》的成功,让暴雪彻底 “路转粉”,迅速推广到全产品线:

  • 星际 2(2010):API 与通信全用 ProtoBuf,开源s2client-proto,催生海量 AI / 分析工具;
  • 魔兽世界(2014+):6.0 版本逐步替换老协议,核心通信 ProtoBuf 化;
  • 炉石传说(2014):全程 ProtoBuf,跨平台(PC / 手机)顺滑;
  • 战网统一:整个Battle.net账号、好友、商城系统全部基于 ProtoBuf,一套协议打通所有游戏。

行业影响:暴雪的标杆效应,让 ProtoBuf 成为网游行业标准 —— 后来的《英雄联盟》《王者荣耀》均采用类似技术。


五、社区 “野史”:玩家与 ProtoBuf 的爱恨情仇

1. 模拟器与协议逆向

《暗黑 3》Beta 期间,玩家社区迅速盯上 ProtoBuf:

  • 2011 年,开源项目Mooege逆向出《暗黑 3》核心 ProtoBuf Schema,写出私人服务器,让玩家免费玩单机;
  • 工具diablo_sniffer抓包解析 ProtoBuf 消息,还原战斗 / 掉落逻辑,外挂作者与暴雪攻防战持续多年。
2. 拍卖行的 “原罪”

2012–2013 年《暗黑 3》拍卖行(RMAH)争议巨大:

  • 技术上,拍卖行是 ProtoBuf 的 “巅峰应用”—— 每秒数万笔交易、跨服数据同步全靠 ProtoBuf 支撑;
  • 玩家吐槽:“ProtoBuf 这么快,就是为了让暴雪赚手续费”,最终 2014 年暴雪关闭 RMAH。
3. 暗黑 4 的延续

2023 年《暗黑 4》依然基于ProtoBuf 3(终于升级),Schema 更精简、性能更强,支持开放世界无缝跨区,传承暗黑 3 的技术遗产。


六、总结:技术决定体验

《暗黑破坏神》与 ProtoBuf 的故事,是3A 游戏技术选型的经典案例

  • 暗黑 1/2:手写私有协议→体验差、维护难、外挂多
  • 暗黑 3:拥抱 ProtoBuf→跨平台、高并发、强安全、易扩展
  • 暗黑 4:迭代 ProtoBuf→开放世界、无缝体验、全球同服

一句话:没有 ProtoBuf,就没有今天全球化、高稳定的暗黑系列,甚至整个暴雪战网生态

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 13:22:21

从事弱电运维多年,聊聊我对UPS电源的真实理解

做弱电、机房运维、设备维护这么多年&#xff0c;我发现一个很有意思的现象&#xff1a;很多设备故障、数据丢失、设备提前老化&#xff0c;其实都不是设备本身坏了&#xff0c;而是供电不稳定导致的。尤其是很多小型机房、办公设备、精密仪器、监控系统&#xff0c;大家平时不…

作者头像 李华
网站建设 2026/5/22 13:17:02

独立开发者如何借助Taotoken模型广场快速选型与对比测试

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何借助Taotoken模型广场快速选型与对比测试 对于独立开发者或小型创业团队而言&#xff0c;项目初期选择合适的大模型…

作者头像 李华
网站建设 2026/5/22 13:15:39

企微API接口,如何利用 RPA 补充外部群自动化能力?

在开发企业微信相关的营销系统或私域工具时&#xff0c;开发者往往会陷入一个两难的境地&#xff1a; 官方接口审批流程漫长&#xff0c;且出于风控考虑&#xff0c;对外部群&#xff08;External Chat&#xff09;的能力锁得死死的&#xff0c;很多核心的主动触发动作根本不开…

作者头像 李华
网站建设 2026/5/22 13:08:13

水文数据通过SZY206协议网关上报水利管理平台

某流域水利管理部门负责辖区内多条河流的水量调度与防洪预警工作&#xff0c;但长期以来面临诸多痛点&#xff1a;辖区内分布着数十个流量监测站点&#xff0c;部分站点地处偏远山区&#xff0c;大量监测数据仍依赖人工定期到现场抄表记录&#xff0c;时效性差、人力成本高&…

作者头像 李华
网站建设 2026/5/22 13:06:27

无人超市|基于Java+vue的无人超市管理系统(源码+数据库+文档)

无人超市管理系统 基于SprinBootvue的无人超市管理系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 后台管理员模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂…

作者头像 李华