一个游戏,一台电脑,直接扔进垃圾桶。 听起来很奢侈。但事实证明,这是我们做过的最便宜的好决策之一。 DreamCore 是一个让你通过聊天来制作网页游戏的平台。你输入"一个猫咪飞过天空的游戏",几分钟后,一个可以玩的游戏就出现了,还带有一个你可以分享的 URL。我们的大多数用户并不是开发者,其中不少是小学生。 在底层,每一个这样的请求,都会启动一个全新的 E2B 沙箱——本质上是一台全新的虚拟电脑——在它内部运行一个编码代理,然后把整台机器整个扔掉。 这篇文章要讲的是:我们为什么要采用这种隔离方式,以及盒子内部到底发生了什么。 **我们在构建什么** 上面提到的大多数游戏,都来自我们的基础模板,是为了写这篇文章而启动并截图的。 这篇文章里的每一张截图、每一个工具输出都是真实的——没有任何 mock。 我们首先必须决定的是:在哪里运行代理。 真正决定架构的是这一点:用户的聊天消息驱动着一个编码代理,而这个代理会创建文件、运行命令。换句话说,用户输入会启动一个程序,这个程序可以自由访问文件系统和 shell。直接把它运行在我们自己的服务器上,从来都不是一个可选项。 整个生成的流程完全发生在沙箱内部。宿主机负责派发任务、收集产物、对外提供访问——它自己从不编写游戏代码。 **一个代码运行器是不够的** 我最初的思维模型是错的。我本以为我们需要的是一项代码执行服务——把代码发过去,拿回结果。但构建一个游戏,代理实际需要做的事情是这样的: - 创建目录树,写设计文档,写出 index.html 和资源文件 - 订购图片,等待它们生成,把文件放到正确的位置,并在代码中引用它们 - 运行命令检查自己的工作,阅读检查结果,修复问题,再跑一遍检查 - 在整个会话期间(往往持续几分钟甚至更久)保持整个工作中的文件树存活 这些需求,没有一项符合"把一段代码发过去求值"的模式。它需要的不是一个执行器,而是一台完整的、有状态的计算机——这正是我们选择 E2B 沙箱的原因。
![]()
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.