我正在尝试获取一款名为《0 A.D.》的开源游戏。这款游戏本身具有一定的特色,但其资源分布却构成了一个典型的“获取困境”。首先,游戏的官方网站位于海外,这本身就增加了跨国访问的复杂性。更关键的是,我无法在 GitHub 上找到完整的官方发布版本。这种资源缺失的状况,迫使我必须在两种非理想的下载途径之间做出选择:要么依赖 Torrent 协议进行下载,要么使用提供的直链进行下载。在信息不对称的情况下,选择过程就成了一场资源成本与时间成本的权衡博弈。从理论上讲,直链下载外网文件,其传输速度通常会比 P2P 方式快上好几倍。然而,对于像《0 A.D.》这样并非大众热门的“小众”老游戏而言,其下载速度却慢得令人难以置信。

走 Torrent 方式,在这种情况下也只是走直链,因为缺乏活跃的 Peers 来提供加速,效率也无法得到保障。更重要的是,我面临着一个存储硬性限制:我不想在 Mac 操作系统上进行游戏的编译。在 Mac 环境下编译它,不仅需要下载大量的依赖包,更会占用巨大的存储空间,这使得编译过程的资源消耗成本变得极高。面对“慢速直链”和“资源消耗巨大的编译”这两个选项,我最终做出了一个基于成本效益的理性选择——选择直链下载。这个决定是基于对存储成本和时间成本的精确计算。直链下载只需要发起一次服务器请求,虽然过程可能缓慢,但它避免了编译过程中伴随的存储空间爆炸和复杂的环境配置。然而,选择直链并非意味着下载过程会轻松。

我必须承认,对于这种非主流的外网文件,下载速度的瓶颈是真实存在的。在过去,我或许还能依赖一些网友们搭建的“公益的外网文件缓存服务器”来加速下载。但现实是,这些可靠的、公开的缓存服务已经变得极其稀缺,甚至可以说几乎找不到。面对这种基础设施的缺失,我不能再依赖传统的“等待”模式。因此,我转而采用了更具技术性的解决方案:我决定使用 Aria2 这种专业的下载工具,通过命令行界面进行多线程下载。这个过程虽然高效,但仍需要投入大约一个小时的时间,这是一种主动的、高强度的资源投入。如果我有更充裕的时间和资源,我甚至可以设计一个更复杂的自动化流程。这个流程的核心思想是利用 GitHub Actions 的自动化能力。

你可以去可以编写一个 GitHub Actions 脚本,负责将游戏文件下载下来,并将其缓存到 GitHub 的存储空间中。接下来,再让脚本根据文件的大小,将整个游戏包进行分段处理,逐个上传到 GitHub 的 Releases 页面。最后,用户就可以利用现成的 GitHub 文件下载代理服务,将这些分段文件逐一下载,并在本地进行高效的拼装还原。这或许速度会快一点,不过占用公共资源还是有点不道德,建议不是太慢的就别用。