你知道的,做网络联机游戏开发一定要用 UDP,因为他比 TCP 更快因为是 packet based,但是 UDP 会丢包会乱序,所以你要在实现一个 reliable UDP 的方案,或者挑选一个现成的比如 enet 和 kcp,你还可以一部分数据像 VFX 这些跟游戏逻辑关系影响不大的你可以把他用 unreliable 的信道来传输这样让总体延迟降低,还有一些广为人知的游戏网络编程的通用 good practice。
但是你要怎么验证你 UDP 方案是 reliable 的呢?游戏在丢包的时候会有逻辑错误会 crash 吗?UDP 包重复的时候又会如何?
这也是我在 2012 年第一次做联机开发时候碰到的问题,当时我没有找到免费开源的软件能够在单机本地 loopback 的情况下来做延迟模拟。这个问题我就一直记着直到我在网上冲浪的时候偶然看到了 WinDivert。
于是在 2013 年的国庆假期我把 clumsy 第一个版本赶了出来。快进到 2025 年:
clumsy 最有名的有标注的用户可能是 Factorio,但根据我的了解挺多游戏都有开发者在用 ,这也是我做这个的目的:给联机游戏开发简单快速的复现延迟和丢包相关的 Bug。我自己的工作中它也帮我解决过不少的问题,但最离谱的还是我几年前收到一封邮件:有一个老哥用 clumsy 定位了战斗机组装工厂里面因为网络线路干扰导致激光定位组件失灵的问题。