网络与分布式2016fabiensanglard.net
DOOM 3 网络架构(2006)
The DOOM 3 Network Architecture (2006)
进阶 · 约 45 分钟读完前置知识:UDP 与确认机制、游戏状态同步、二进制序列化与压缩
导读
这篇文档梳理 DOOM 3 的网络架构,核心是快照式状态同步:不一次性发送完整世界状态,而是发送增量/差值,并用自定义二进制位打包与压缩来压低消息体积。由于增量依赖上一份快照,即使底层使用 UDP,也需要额外确认机制来保证增量能正确应用。
HN 关注点:id Software 如何在 UDP 上做出低带宽、小消息量的快照同步,并把它与现代游戏网络/回放格式作对比。
HN 评论精选
这几条评论里:补充 3
补充指出 DOOM 3 的 delta 快照依赖确认机制,且使用自定义二进制打包与压缩来压缩消息。
把游戏快照状态作为增量发送很有意思;我一开始以为他们发送的是快照的实际 diff,但其实只是不一次性发送全部状态,而从位打包部分看他们用了某种自定义二进制格式。之所以是增量,是因为即使使用 UDP,增量也只有在拥有上一份快照时才能工作,因此需要确认该增量已被接收,而 UDP 默认不提供这种确认。连压缩都是自定义的。极小的消息体积对他们非常重要。
mevile查看英文原文
Sending game snapshot state as deltas is pretty interesting as initially thought they were sending actual diffs of snapshot but they just mean they're not sending all state at once and from the bitpacking section it looks like they're using some kind of custom binary format. The reason they're deltas is that even though they're using UDP, deltas only work when you have the previous snapshot and so they require acknowledgement of the delta, something you don't get with UDP by default. Even the compression is custom. Extremely small message sizes was really important to them.
补充补充现代游戏 Dota2 用 protobuf 处理网络/回放,与 DOOM 3 自定义格式形成对比。
有趣的是,据我所知 Dota2 的网络通信和回放直接使用 protobuf;附链接:https://github.com/skadistats/smoke/wiki/Anatomy-of-a-Dota-2-Replay-File
kyrra查看英文原文
Dota2 interestingly enough just uses protobufs for network and replays I believe. https://github.com/skadistats/smoke/wiki/Anatomy-of-a-Dota-2-Replay-File
补充表达对作者 Fabien Sanglard 的 Wolfenstein 3D 引擎书籍的期待。
我真的等不及 Fabien 那本关于 Wolfenstein 3D 引擎的书出版,真心希望它能出。
douche查看英文原文
I really cannot wait for Fabien's book on the Wolfenstein 3D engine to come out. I really hope that it does.
相关资源
从这篇论文所有 HN 讨论帖的全部评论里整理出来的链接。
历次讨论
- 2016Hacker News 讨论帖217 分 · 33 评
同领域还值得读
Paxos vs. Raft:分布式共识是否已达成共识?
Paxos vs. Raft: Have we reached consensus on distributed consensus?
重新审视了 Paxos 与 Raft 两种分布式共识算法之间的差异,试图在一个统一的框架下比较它们,并论证二者的相似程度远高于通常的认知,许多所谓的差别只是表述层面的。
网络与分布式2020 · 343 分 · 65 评 · 引用 10进阶 · 约 28 分钟编辑精选Stellar 协议:互联网级共识的联邦模型
Stellar Protocol: A Federated Model for Internet-Level Consensus (2016)
提出 Stellar Consensus Protocol(SCP),一种面向互联网级共识的联邦拜占庭协议模型。
网络与分布式2018 · 301 分 · 61 评专业 · 约 90 分钟编辑精选拜占庭将军问题(1982)
The Byzantine Generals Problem (1982)
这篇 1982 年论文提出并形式化了拜占庭将军问题:在分布式系统中,部分节点可能叛变或故障、通信不可完全信任时,忠诚节点如何达成一致行动。
网络与分布式2018 · 290 分 · 77 评进阶 · 约 75 分钟编辑精选Google 变差了吗?对搜索引擎中 SEO 垃圾的纵向调查
Is Google Getting Worse? A Longitudinal Investigation of SEO Spam in Search
对搜索引擎结果中的 SEO 垃圾内容做了纵向追踪:作者团队在一段时间内持续采集 Google、Bing、DuckDuckGo 等引擎针对商品评测类查询的结果,用分类器识别联盟营销…
网络与分布式2024 · 276 分 · 274 评入门 · 约 45 分钟编辑精选使 CRDT 能够容忍拜占庭故障
Making CRDTs Byzantine Fault Tolerant
Martin Kleppmann 等人的论文研究如何让 CRDT(无冲突复制数据类型)抵御拜占庭故障节点,即部分参与者恶意篡改数据时仍能保证一致性。
网络与分布式2022 · 266 分 · 40 评进阶 · 约 90 分钟编辑精选