档案库 · 游戏与玩法 · 技术决策 · 1996
雷神之锤世界:卡马克让300毫秒拨号多人游戏如单机般流畅
针对调制解调器链路重构Quake,卡马克将服务器响应时间降至4毫秒以下,并让每个客户端预测自身移动。
id Software
当时的题目
In August 1996 Carmack was reworking Quake for internet play. v1.01's netcode assumed sub-200 ms links and ran servers on a 20 fps tick loop, while most players were stuck on 300 ms+ modem connections; the old reliable-stream code was, in his words, a big mess - so he took it out and started over.
它是怎么成立的
1996年8月,John Carmack复制了Quake代码库,开始了一个他称为QuakeWorld的项目:互联网游玩作为独立产品,与注册游戏和谐共存的单独客户端和服务器可执行文件。他的动机直白——v1.01的网络代码是为低于200毫秒的连接设计的,但当时世界上约99%的人通过slip或ppp调制解调器链路访问互联网,延迟达300毫秒或更差,且常经过拥挤的ISP。
他的第一步是架构性的:他废弃了可靠流网络代码——他曾在其上改装不可靠旁路直至混乱——并以不可靠数据报作为基础原语重建。服务器不再是20fps的游戏循环,而是文件服务器风格的循环:每收到一个数据包就立即处理——仅将那个玩家向前移动并在4毫秒内响应,而不是超过50毫秒。带宽估算使堵塞的拨号链路就停止发送,而不是让路由器将延迟缓冲成多秒停顿。
最大的变化是客户端移动模拟:客户端猜测上述移动的结果直到服务器权威答复到达,这样即使通过200毫秒以上的链路移动也感觉像本地单人游戏。在它周围,卡马克勾勒了一个主服务器、持久账户、全局击杀排名和约10美元的名称注册,同时指出诚实的局限:其他玩家和射弹仍然滞后,因此你必须预判射击。他描述的预测本地模式成为在线射击游戏隐藏延迟的标准模板。
妙在哪
- 客户端预测对玩家自身移动隐藏了往返延迟,因此300毫秒链接感觉即时而非漂浮。
- 逐包事件循环将服务器响应时间从约50毫秒降至4毫秒以下,因为它从不等待整个世界tick。
- 带宽估算为调制解调器链路提供了优雅的故障模式——减少每秒更新次数而非缓冲堆积和多秒停顿。
- 持久账户、全球排名列表和约10美元的注册费将互联网功能变成收入来源和购买而非盗版的理由。
做出来什么
Server turnaround fell from over 50 ms to under 4 ms, and on 200 ms+ connections Carmack reported that player movement felt exactly like playing a single-player game. Reposted in 2019, the plan drew 395 points and 162 comments on Hacker News; the predict-locally, correct-from-the-server pattern it describes became the standard anatomy of online action games.
可以借走的
当网络成为瓶颈时,围绕最坏情况重新设计:将模拟推向边缘,每收到请求即响应,并让慢速链路降低更新速率而不是缓冲造成延迟。
后来
该.plan文件称QuakeWorld的工作将在Quake 2之路上回滚到单人游戏中,同时标记未解决的问题:时间不再均匀推进,射弹看起来来自玩家过去的位置而非当前位置。测试预计在1996年8月底开始。记录在john-carmack-plan-archive中,这封信在2019年5月被Hacker News转载后仍获得395分和162条评论——其中阐明的客户端预测和事件驱动服务器思想在几十年后仍是网络动作游戏的参考模型。
资料来源
- John Carmack .plan, 2 August 1996 (QuakeWorld latency and business model)
- John Carmack on QuakeWorld latency and business model (1996) - Hacker News discussion
发现哪里写错了?告诉我们。
轮到你了
你刚读完一个点子。把你手上的题目说出来,看看谁接过同样的题。
免费账号 · 3 次免费提问 · 不用绑卡