← 返回博客

SSH 远程连接来了!

2024年10月30日


对于拥有大型代码库的人来说,在笔记本电脑上编程可能会让人感到不知所措。风扇不断旋转,语言服务器不断内存不足,并且重新构建需要很长时间...

现在,在 Zed 中,您可以在任何可以 SSH 连接的机器上打开一个项目。UI 在本地完全运行,为您提供每秒 120 帧的完美配置的图形,但所有功能:语言服务器、任务和终端都在远程服务器上运行,它们可以利用云硬件。

对于一次性项目,它使用起来很简单

zed ssh://my-host/~/code/zed

您可以根据需要配置更长时间的连接

The "Remote Projects" UI in Zed.
Zed 中的“远程项目”UI。

有关更多信息,请参阅文档

构建远程开发

我们一直在开发我们的远程开发功能。虽然 Zed 是为远程代码编辑而构建的,但更改基础设施以支持 SSH 需要解决一系列子问题,从 SSH 连接维护,到我们如何构建远程服务器,再到将该功能集成到我们在 Zed 中拥有的所有其他内容。

对于 SSH 连接,我们使用 ControlMaster 设置来维护与每个主机的单个连接。 这意味着您可以打开新终端并生成任务,而无需重新输入密码或重新进行身份验证。 连接后,我们下载适用于您的操作系统和架构的远程服务器。 与我们正常的 Linux 版本不同,远程服务器可以使用 musl 进行编译,这不需要动态链接。 这使其可以在较旧的发行版(以前我们遇到与 glibc 的兼容性问题)以及像 Nix 这样没有动态链接的全局库集的现代共享无关发行版上运行。 建立连接并安装远程服务器后,我们会将其初始化为守护程序,以便在连接断开时,远程服务器继续运行,并且在重新连接时,您的语言服务器仍然完全初始化。 我们还会在本地备份任何未保存的更改,因此您永远不会丢失您的工作。

难题的最后一块是使 SSH 项目与协作一起工作。 这已经对我们的协作同步协议进行了真正的压力测试,因为现在在通过 SSH 进行的 2 人协作中,可能至少涉及四个不同的节点。 我们必须重写我们的 Project,并将其拆分为逻辑块,这些逻辑块可以在远程和本地模式下启用,具体取决于您的客户端是协作主机、ssh 主机还是协作访客。 我们还有一些新的、有趣的 测试,这些测试实例化了这些角色中的每一个,以及我们的协作服务器,并确保正确完成同步。 如果您与朋友或同事一起处理项目,那么该项目是在您的笔记本电脑上还是在您可以 SSH 连接的机器上,对于他们来说应该是完全透明的。

请立即试用,并一如既往地在 GitHub IssuesDiscord 中给我们留下反馈。