我们的托管世界是怎么运转的
你自己的一个网络世界,朋友随时可以加入——还不用任何人去架设服务器。这就是我们“托管世界”的想法,这篇文章里我会带你看看,在门户网站的“开始游戏”按钮背后,到底发生了什么。
一切的核心是 WorldHost:我们服务器上的一个小服务,负责管理世界。每个世界都运行在自己的 Docker 容器里——完全隔离,有自己的存档、自己的内存上限和自己的 CPU 上限。没人玩的时候,什么都不运行:世界在睡觉,容器停止,不占用任何资源。
当有人在门户网站点击“开始游戏”时,是这样的:WorldHost 先检查你到底能不能加入——对于有密码保护的世界,密码会在世界被唤醒之前就检查,所以没人能靠尝试加入就把别人的世界启动起来。检查通过之后,容器才会启动,世界读取存档,而你会收到一个只对这个世界有效、很快过期的加入令牌。与此同时,门户网站会显示“正在唤醒世界……”的状态。
等所有玩家都离开世界,过一会儿它就会重新睡去——存档写好,容器停止。如果你更想在本地继续玩自己的世界,可以下载存档,以后再上传回来:托管世界的存档和本地游戏的存档是一样的。
整个系统故意做得很小:没有 Kubernetes,没有云端魔法——一台服务器、Docker,再加一个负责启动和停止容器的服务。对一个家庭项目来说,这能走得出奇地远。具体能走多远,以及这样一台服务器要花多少钱,是我们关于 VPS 那篇文章里的故事。
留言